在AngularJS中使用指令时使用过滤器
在AngularJS中使用指令时使用过滤器
我试图在AngularJS指令中使用过滤器,但不确定如何确切地使用。根据邮件列表上的一些信息,似乎应该能够注入$filter并使用它,但我不确定如何/在哪里调用它。
我的指令目前看起来是这样的:
myApp.directive('fancyDisplay', ['$filter', function($filter) { return { scope: { 'fancyDisplay': '=' }, template: "{{datum.name}}" }; }]);
尽管filter:tagFilter
不起作用。我应该如何在指令中过滤我的数据?
可在http://jsfiddle.net/VDLqa/4/上找到JSfiddle。提前感谢任何回复。
问题的原因是在指令上创建了一个新的隔离作用域(scope: { 'fancyDisplay': '=' }
),这意味着您将无法访问父作用域的属性。由于tagFilter
在父作用域上定义,因此您将无法访问它。
将tagFilter
作为属性传递给指令:
<div fancy-display="model.data" filter="tagFilter"></div>
然后在指令上:
scope: { fancyDisplay: '=', tagFilter: '=filter' },
jsfiddle: http://jsfiddle.net/bmleite/VDLqa/5/
嗯...如何扩展到多个过滤器呢?
定义更多属性:<div fancy-display="model.data" filter1="filter1" filter2="filter2"></div>
然后在指令中:scope: { fancyDisplay: '=', filter1: '=', filter2: '=' }
。注意:我将它们称为'filter1'和'filter2',但您可以根据需要随意命名。此外,如果您开始有许多过滤器,我建议您在将数据发送到指令之前对ng-model
数据进行预过滤。
预过滤是有趣的,因为这是我开始的地方。我在指令本身上尝试了这个方法,但它没有起作用;我应该如何更改这个fiddle来实现这个目标呢?
在监视器中添加类似这样的内容:$scope.model.filteredData = $filter('filter')($scope.model.data, $scope.tagFilter);
并在HTML中:<div fancy-display="model.filteredData"></div>
jsfiddle.net/bmleite/VDLqa/6(注意:不要忘记在控制器中注入$filter
)。
谢谢!我只是忘记添加['$filter', function($filter)
。