首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角纳克-重复滤波器不工作

角纳克-重复滤波器不工作
EN

Stack Overflow用户
提问于 2016-01-10 04:22:21
回答 1查看 926关注 0票数 0

我有一个FAQ数组,我从ajax调用以及一个单独的FAQ类别数组中接收到这些问题,当您单击FAQ的类别时,只显示那些具有匹配的categoryId的FAQ。我已经尝试了很多不同的东西,包括ng显示,但现在我的努力集中在尝试获得filter:工作。任何帮助都会很大,appreciated...Here是代码:

代码语言:javascript
复制
   <div data-ng-controller="FAQController as dashboard" id="ctrler">

      <div ng-repeat="cat in dashboard.categories" class="col-md-2">
                <a data-ng-click="dashboard.filterForAnimation(cat)" href="#">
                    <div class="panel category-panel" data-fill-color="" data-context="">
                        <div class="panel-body background-6">
                            <span hidden class="cat-question-id" value="{{cat.id}}"></span>
                            <h4 class="question-category category-1">{{cat.name}}</h4>
                        </div>
                    </div>
                </a>
            </div>
    <!-- visbile FAQs -------------------->
        <div class="col-md-4 FAQ fades" data-ng-repeat="x in dashboard.visibleFaqs track by x.id | filter:dashboard.filter">
            <div class="panel-body background-6 bg-grd-dark" data-fill-color="true">
                <h4 class="headline question">{{x.question}} </h4>
                <p class="answer">{{x.answer}}</p>
                <a type="button" class="btn btn-success mb-1x mr-1x" href="/FAQs/{{x.id}}/edit">Edit</a>
                <button type="button" data-ng-click="dashboard.delete(FAQ)" class="btn btn-danger mb-1x mr-1x" data="{{x.id}}">Delete</button>
            </div><!-- /.panel-body -->
        </div>
      </div>
   </div>

这里是控制器:

代码语言:javascript
复制
       (function () {
        "use strict";
        angular.module(APPNAME)
            .controller("FAQController", FAQController);

        FAQController.$inject = ['$scope', '$baseController', '$faqService'];

        function FAQController($scope, $baseController, $faqService) {

            var vm = this;
            vm.headingInfo = "FAQs"
            vm.faqItems = null;               
            vm.categories = null;
            vm.visibleFaqs = null;
            vm.selectedCategoryId = null;

            vm.$faqService = $faqService;
            vm.$scope = $scope;

            vm.receiveFAQItems = _receiveFAQItems;
            vm.onError = _onError;
            vm.delete = _delete;
            vm.deleteSuccess = _deleteSuccess;
            vm.getItemSuccess = _getItemSuccess;
            vm.filterForAnimation = _filterForAnimation;
            vm.filter = _filter;


            $baseController.merge(vm, $baseController);

            vm.notify = vm.$faqService.getNotifier($scope);

            render();

            function render() {
                vm.$faqService.getCategories(vm.getItemSuccess, vm.onError);
                vm.$faqService.ajaxGetAll(vm.receiveFAQItems, vm.onError);
            }

            function _getItemSuccess(data) {
                vm.notify(function () {
                    vm.categories = data.items;
                });
            }

            function _receiveFAQItems(data) {
                vm.notify(function () {
                    console.log(data.items);
                    vm.faqItems = data.items;                        
                })
            }

            function _onError(jqXhr, error) {
                console.error("error");
            }

            function _delete(faqArray) {
                var index = vm.faqItems.indexOf(faqArray);
                vm.faqItems.splice(index, 1);
                var id = faqArray.id;
                vm.$faqService.ajaxDelete(id, vm.deleteSuccess, vm.onError)
            }

            function _deleteSuccess(faqArray) {
                console.log("delete successful");
            }

            function _filterForAnimation(item) {
                console.log("category clicked");
                vm.selectedCategoryId = item.id;
                for (var i = 0; i < vm.faqItems.length; i++) {
                    if (vm.faqItems[i].categoryId == vm.selectedCategoryId){                                                                
                        vm.filter(vm.faqItems[i].categoryId, vm.selectedCategoryId)
                    }
                }

            }

            function _filter(faq, categoryId) {
                if (faq == categoryId) {
                    return true;
                }
                else {
                    return false;
                }
            }

        }
    })()
EN

回答 1

Stack Overflow用户

发布于 2016-01-10 10:56:19

与以前的答案相同,但方法不同:

_filter函数更改为:

代码语言:javascript
复制
function _filter(faq) {
    return faq.categoryId == vm.selectedCategoryId;
}

您的vm.selectedCategoryId_filterForAnimation动态设置,因此它将工作。

您还可以使用这样的角度过滤器提供程序:

代码语言:javascript
复制
function _filter() {
    return function(items, categoryId) {
        return items.filter(function(item) {
            return item.id == categoryId;
        });
    }

声明

代码语言:javascript
复制
angular.module(APP_NAME)
//...
.filter('categoryFilter', _filter);

在你的标记中:

代码语言:javascript
复制
data-ng-repeat="x in dashboard.visibleFaqs track by x.id | categoryFilter:dashboard.selectedCategoryId"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34702034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档