2013-02-28 97 views
6

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

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

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/先谢谢您的任何答复。

回答

14

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

通行证tagFilter作为该指令的属性:

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

而且对指令:

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

的jsfiddlehttp://jsfiddle.net/bmleite/VDLqa/5/

+0

嗯......我将如何扩展到多个过滤器? – jgm 2013-02-28 14:54:52

+0

定义更多ATTRS:''

和指令'范围:{fancyDisplay: '=',过滤器1: '=',过滤器2: '='}'。注意:我已经将它们称为'filter1'和'filter2',但是可以随意调用它们。另外,如果你开始有很多过滤器,我建议你在发送给指令之前预先过滤'ng-model'数据。 – bmleite 2013-02-28 15:26:04

+0

预过滤很有趣,因为这是我开始的地方。我试过这个指令本身,但它不起作用;我将如何改变小提琴来实现这一目标? – jgm 2013-02-28 15:56:04

1

感谢@bmleite你的答案。

可能有帮助的另一件事是确保申报 您的NG-重复指令,这样柜面你有 您的名单deplicates。

我花了永远摸不着头脑。

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

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

}); 

逆不起作用:显然,你用x指定的轨道之前,你必须过滤 。