Javascript 从AngularJS中的筛选器访问范围变量
我通过以下方式将Javascript 从AngularJS中的筛选器访问范围变量,javascript,angularjs,scope,Javascript,Angularjs,Scope,我通过以下方式将date值传递给我的自定义筛选器: 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
值传递给我的自定义筛选器:
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;
}
});
我也想在那里注入一些范围变量,就像我在指令中可以做的那样。不需要将这些变量显式地作为函数参数传递就可以做到这一点吗?显然可以
通常,您会将范围变量作为函数参数传递给过滤器:
函数MyCtrl($scope){
$scope.currentDate=新日期();
$scope.dateFormat='short';
}
{{currentDate | date:dateFormat}}/-->7/11/13下午4:57
但是,要传入当前作用域,您必须传入this
:
{{currentDate | date:this}
而此
将作为当前范围的参考:
简化:
app.controller('AppController'),
职能($范围){
$scope.var1='这是一些文本';
$scope.var2='这是附加的自定义筛选器';
}
);
app.filter('filterReceiptsForDate',函数(){
返回函数(输入、范围){
返回输入+''+scope.var2+'';
};
});
警告:
我发现
这个
引用了本地$scope
。不确定这是否是一种安全的访问方式。谢谢您的全面回答。我想我最好把这些变量显式地传递给过滤器。谢谢!对于阅读本文的其他人,除非传递html,否则不必使用ng bind html unsafe
。此外,我使用了$scope
而不是scope
,因此它在过滤器的函数中与我在其他任何地方使用的函数相同:)如果确实需要更新范围变量,则应该在控制器中移动过滤器。这样,它就没有“严重”的依赖性,并且更容易测试。只需在控制器中使用$filter('filter')(数组、表达式、比较器、anyPropertyKey)