在指令中使用$ filter时出现角度“未知提供程序”错误

时间:2014-08-08 18:29:29

标签: angularjs angularjs-directive

我有一个指令需要在代码中使用angular的$ filter。但是,在尝试使用它时,我收到了一个错误:

[$injector:unpr] Unknown provider: FilterProvider <- Filter

以下是导致错误的最小示例:http://jsfiddle.net/5tLtj3nh/

我很难过,想弄清楚我做错了什么。

3 个答案:

答案 0 :(得分:5)

您错误地使用了$filter服务。

您必须首先从$filter服务获取过滤器:

var filterFilter = $filter('filter');
filterFilter([], 'query');

或一个班轮:

$filter('filter')([], 'query');

如果您感到困惑,'filter'过滤器是angularjs的内置过滤器之一。

还有更多内容,请参阅:https://docs.angularjs.org/api/ng/filter

  • 货币
  • 日期
  • 过滤
  • JS​​ON
  • limitTo
  • 小写
  • ORDERBY
  • 大写

提示:您还可以注入一个单独的过滤器,如下所示:

app.directive('testDirective', ['filterFilter', function(filterFilter) {
    return {
        restrict: 'E',
        template: '<div>testDirective</div>',
        link: function(scope, elem, attrs) {
            filterFilter([], 'query');
        }
    }
}]);

答案 1 :(得分:1)

如评论中所述,您的语法错误。要根据documentation使用filter $filter语法:

$filter('filter')(array, expression, comparator)

假设您要根据您需要的query字符串进行过滤:

$filter('filter')([], 'query')

答案 2 :(得分:1)

用于工作的plnkr

http://plnkr.co/edit/US6xE4h0gD5CEYV0aMDf?p=preview

检查角度环境的设置方式。 按照步骤:

检查您的Index.html是否已加载脚本。

<script src="scripts/angular-filter.js"></script>

检查控制器中是否使用了$ filter

    (function () {
    'use strict';
    var controllerId = 'controllerName';
    angular.module('myApp')
    .controller(controllerId, ['$rootScope', '$scope', '$timeout', 'security', '$filter', functionName]);
    function functionName($rootScope, $scope, $timeout, security, $filter) {
        // your controller code.
    }})();

您的html页面正在使用FilterBy

    <tr ng-repeat="row in tableList | filterBy: ['col1','col2','col3'] : vm.listFilter">
        <td class="text-left">{{row.col1}}</td>
        <td class="text-left">{{row.col2}}</td>
        <td class="text-left">{{row.col3}}</td>
    </tr>

加载角度

时不要忘记包含依赖项
    var app = angular.module('app', [
    'common',           // These are just example, can be anything
    'common.bootstrap', 
    'security',         
    'nsPopover', 'angular.filter'
    ]);