从AngularJS中的filter访问范围variables
我将date
值传递给我的自定义filter:
angular.module('myapp'). filter('filterReceiptsForDate', function () { return function (input, date) { var out = _.filter(input, function (item) { return moment(item.value.created).format('YYYY-MM-DD') == date; }); return out; } });
我也想在这里注入一些范围variables,就像我可以在指令中做的那样。 是否有可能做到这一点,而不必作为函数参数显式传递这些variables?
显然你可以。
通常你可以将作用域variables作为函数parameter passing给filter:
function MyCtrl($scope){ $scope.currentDate = new Date(); $scope.dateFormat = 'short'; }
<span ng-controller="MyCtrl">{{currentDate | date:dateFormat}}</span> // --> 7/11/13 4:57 PM
但是,要通过当前的范围,你必须通过this
:
<span ng-controller="MyCtrl">{{currentDate | date:this}}</span>
this
将是对当前范围的参考:
简化:
app.controller('AppController', function($scope) { $scope.var1 = 'This is some text.'; $scope.var2 = 'And this is appended with custom filter.'; } ); app.filter('filterReceiptsForDate', function () { return function (input, scope) { return input + ' <strong>' + scope.var2 + '</strong>'; }; });
<div ng-bind-html-unsafe="var1 | filterReceiptsForDate:this"></div> <!-- Results in: "This is some text. <strong>And this is appended with custom filter.</strong>" -->
PLUNKER
警告:
- 注意这一点,并使用范围只读取filter内的值,因为否则,你会很容易find你自己在$摘要循环。
- 需要这种“重”依赖性(整个范围)的filter往往很难testing。
我发现this
引用本地$scope
。 不知道这是否是安全的方式来访问它。