0

首先 - 让我为完全是 Angular 新手而道歉。

我目前正在开发一个新的网络应用程序并尝试遵循样式指南(https://github.com/johnpapa/angular-styleguide

我的工作正常,但目前必须在我的每个控制器中声明我的过滤器功能。

我不希望有这种重复并在自己的文件中有一份副本,但如果我这样做并尝试在我的模板中使用它,它就不会被识别。

我的过滤功能是:

(function() {
    'use strict';

    angular
        .module('lfms')
        .filter('includeDeleted', includeDeleted);

    includeDeleted.$inject = ['property', 'includeDeleted'];

    function includeDeleted(property, includeDeleted) {
        if (includeDeleted) {
            return function (item) {
                return true;
            }
        } else {
            return function (item) {
                return !(item[property]);
            }
        }
    }
})();

我正在尝试按如下方式使用它:

<tr ng-repeat="crew_member_detail in vm.crew_members | filter: vm.includeDeleted('deletedAt', vm.showDeleted) | filter:vm.search | orderBy: predicate:reverse">

如果我在控制器中包含该功能(如下)一切正常:

(function() {
    'use strict';

    angular
        .module('lfms')
        .controller('CrewController', CrewController);

    CrewController.$inject = ['CrewData', '$filter'];

    function CrewController(CrewData, $filter) {
        var vm = this;
        vm.crew_members = CrewData("");
        vm.showDeleted = false;
        vm.includeDeleted = includeDeleted;

        function includeDeleted(property, includeDeleted) {
            if (includeDeleted) {
                return function (item) {
                    return true;
                }
            } else {
                return function (item) {
                    return !(item[property]);
                }
            }
        }
    }

})();

我试过删除“vm”。在过滤器之前,但仍然没有。我认为这是一个范围界定问题,但似乎找不到任何东西来指导我找到解决方案。

感谢您提供的任何帮助!

4

1 回答 1

0

您可以创建一个过滤器服务 - 请参阅https://github.com/johnpapa/angular-styleguide#services

(function() {
    'use strict';

     angular
       .module('app')
       .service('filterSrv', filterSrv);

     function filterSrv() {
           this.includeDeleted = function(property, includeDeleted) {
                if (includeDeleted) {
                    return function (item) {
                        return true;
                    }
                } else {
                    return function (item) {
                        return !(item[property]);
                    }
                }
           }
           // add more filter methods
      }

})();

然后在您的控制器中注入您的 filterService:

(function() {
    'use strict';

    angular
        .module('lfms')
        .controller('CrewController', CrewController);

    CrewController.$inject = ['$filter','CrewData', 'filterSrv'];

    function CrewController($filter, CrewData, filterSrv) {
        var vm = this;
        vm.crew_members = CrewData("");
        vm.showDeleted = false;
        vm.includeDeleted = filterSrv.includeDeleted;


    }

})();
于 2015-04-23T09:22:30.617 回答