[英]Calling $scope in custom filter (angular)
我正在使用此角度过滤器来过滤数组中的对象,其localteam_id
属性与$scope.whichMyteam
保存的值匹配。 这很好用。
视图
<div ng-repeat="fixture in getFixtures | filter: {localteam_id: whichMyteam} ">
我想扩展过滤器,包括一个部分标准:所以它实际上是:
<div ng-repeat="fixture in getFixtures | filter: {localteam_id: whichMyteam && visitorteam_id: whichMyteam} ">
...但是a)这不起作用,并且b)即使它确实如此,它也会变得有点麻烦,并且似乎有理由制作自定义滤镜。
所以,我试着制作一个。 我遇到的问题是我需要在过滤器中引用$scope.whichMyteam
值,但似乎过滤器模块无法接受/理解$scope
。 这对于我的实例中的过滤器至关重要,所以我不知道如何解决这个问题。
到目前为止,我的过滤器如下所示:
app.filter('myFixtures', function() {
return function(input) {
angular.forEach(input, function(o) {
output = [];
if (o.localteam_id === $scope.whichMyteam) {
output.push(o);
}
return output;
})
};
});
以上是一个简化版本,它只试图匹配一个属性(只是这样做来测试它并减少移动部件的数量)。 当我在视图中调用它时...
<div ng-repeat="fixture in getFixtures | myFixtures">
......它不起作用。 控制台日志'$ scope未定义'。
更新:我试过这个,仍然无法正常工作!
var myFilters = angular.module('myFilters', [])
myFilters.filter('myFixtures', function(whichMyteam) {
return function(input) {
angular.forEach(input, function(o) {
output = [];
if (o.localteam_id === whichMyteam) {
output.push(o);
}
return output;
})
}
});
<div ng-repeat="fixture in getFixtures | myFixtures(whichMyteam)">
控制台正在记录语法错误(我认为...)
angular.js:13236 Error: [$parse:syntax]
让过滤器函数返回一个函数怎么样?
app.filter('myFixtures', function() {
return function(input, whichMyteam) {
output = [];
angular.forEach(input, function(o) {
if (o.localteam_id === whichMyteam) {
output.push(o);
}
})
return output;
};
});
然后调用传递变量的过滤函数
<div ng-repeat='fixture in getFixtures | myFixtures:whichMyteam'>
---例子
angular .module('app', []) .filter('otherFilter', otherFilter) .controller('controller', controller); controller.$inject = ['$scope']; function controller($scope) { $scope.things = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; $scope.modVal = 2; console.log('controller'); $scope.myFilter = function(x) { return function(y) { return (y % x) === 0; } }; } function otherFilter() { return function(y, x) { var out = []; angular.forEach(y, function(val) { if ((val % x) === 0) { out.push(val) } }); return out; } }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app='app' ng-controller='controller'> <div ng-repeat='thing in things | filter:myFilter(modVal)'> {{ thing }} </div> <br/> <div ng-repeat='thing in things | otherFilter:modVal'> {{ thing }} </div> </div>
你有两个问题:1。如何传递一个参数,html:
<div ng-repeat="fixture in getFixtures | myFixtures:whichMyteam">
JS:
myFilters.filter('myFixtures', function() {
return function(input, whichMyteam) {
...
所以最后你的过滤器是:
myFilters.filter('myFixtures', function() {
return function(input, whichMyteam) {
output = [];
angular.forEach(input, function(o) {
if (o.localteam_id === whichMyteam) {
output.push(o);
}
})
return output;
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.