我想实现如下理论代码:
VIEW.html
<li ng-repeat="player in players | filter:myCustomFilter(player)">{{player.name}}
CONTROLLER.js
// some theoretical conditional statement that return a boolean
$scope.otherCondition = true;
$scope.myCustomFilter = function(player) {
return player.name.substring(0,1).match(/A/gi) && $scope.otherCondition;
}
所以我希望我的所有玩家都加载到 Angular 模型中,但我只想将玩家渲染到名称以字母“A”开头的 DOM 中。当我尝试做这样的事情时,我的控制台通知我 player
未定义。我是否需要编写自定义过滤器才能实现此目的(通过 angular.module().filter()
)?
最佳答案
这是一个工作 fiddle :http://jsfiddle.net/orlenko/jV6DK/
Html 代码(完全按照 Karl Zilles 的建议):
<div ng-app>
<div ng-controller="MyController">
<h2>Names starting with "A":</h2>
<ul>
<li ng-repeat="player in players | filter:myCustomFilter">{{player.name}}</li>
</ul>
<h2>All Names:</h2>
<ul>
<li ng-repeat="player in players">{{player.name}}</li>
</ul>
</div>
</div>
Javascript:
function MyController($scope) {
$scope.players = [{
name: 'Arthur'
}, {
name: 'William'
}, {
name: 'Bertha'
}, {
name: 'Alice'
}];
$scope.otherCondition = true;
$scope.myCustomFilter = function(player) {
return player.name.substring(0,1).match(/A/gi) && $scope.otherCondition;
}
}
关于javascript - ngRepeat 对象上的高级 AngularJS 自定义过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17118180/