6

我正在尝试在 AngularJS 指令中使用过滤器,但不知道该怎么做。从邮件列表上的一些信息看来,您应该能够注入 $filter 并使用它,但我不确定如何/在哪里调用它。

我的指令目前看起来像这样:

myApp.directive('fancyDisplay', ['$filter', function($filter) {
    return {
        scope: {
            'fancyDisplay': '='
        },
        template: "<div ng-repeat='datum in fancyDisplay | filter:tagFilter'>{{datum.name}}</div>"
    };
}]);

虽然filter:tagFilter不起作用。我应该如何过滤指令中的数据?

JSfiddle 可在http://jsfiddle.net/VDLqa/4/ 获得提前感谢您的任何回复。

4

2 回答 2

13

您正在指令 ( scope: { 'fancyDisplay': '=' }) 上创建一个新的隔离范围,这意味着您将无法从父范围访问属性。由于tagFilter在父范围上定义,您将无法访问它。

tagFilter作为属性传递给指令:

<div fancy-display="model.data" filter="tagFilter"></div>

并在指令上:

scope: {
    fancyDisplay: '=',
    tagFilter: '=filter'
},

jsfiddle:http: //jsfiddle.net/bmleite/VDLqa/5/

于 2013-02-28T14:49:48.610 回答
1

感谢@bmleite 的回答。

另一件可能有用的事情是确保像这样声明您的 ng-repeat 指令,以防您的列表中有重复项。

我花了很长时间才弄清楚这一点。显然,您必须在通过 x 指定轨道之前进行过滤:

app.directive("someDirective", function(){ ...

    restrict: "E",
    ...
    template:"<ul ng-repeat='t in tree | filter:key track by $index'><li>{{t}}</li></ul>",

});

反过来不起作用。

于 2014-01-31T01:08:29.000 回答