【发布时间】:2016-02-25 16:13:51
【问题描述】:
尝试创建一个过滤器,当点击一个名称时会显示该特定名称:
{'username': 'julio', 'status': 'created'}, {'username': 'julio', 'status': 'running'}.
然后,如果单击一个条件,则仅显示具有该条件的一个对象:
{'username': 'julio', 'status': 'created'}
请戳:http://plnkr.co/edit/qDUvvBWQtNrLTLgSC8Yq?p=preview
angular.module('app', [])
.controller('Ctrl', function ($scope) {
$scope.users = [
{'username': 'julio', 'status': 'created'},
{'username': 'julio', 'status': 'running'},
{'username': 'phillip', 'status': 'running'},
{'username': 'mats', 'status': 'created'}
];
$scope.filtered = [];
$scope.optionProp = '';
$scope.includeItem = function(item, prop) {
$scope.optionProp = prop;
var idx = $scope.filtered.indexOf(item);
if (idx > -1) {
$scope.filtered.splice(idx, 1);
} else {
$scope.filtered.push(item);
}
}
$scope.filterFn = function(item) {
if ($scope.filtered.length > 0) {// first time
console.info( $scope.filtered.length > 0 );
if ($scope.filtered.indexOf(item[$scope.optionProp]) < 0){
console.warn( $scope.filtered.indexOf(item.username ) );
return;
}
}
return item;
}
})
.filter("unique", function () {
return function (data, propertyName) {
if (angular.isArray(data) && angular.isString(propertyName)) {
var results = [];
var keys = {};
for (var i = 0; i < data.length; i++) {
var val = data[i][propertyName];
if (angular.isUndefined(keys[val])) {
keys[val] = true;
results.push(val);
}
}
return results;
} else {
return data;
}
}
});
<body ng-controller="Ctrl">
<div ng-repeat="user in users | unique:'username'">
<input type="checkbox" ng-click="includeItem(user, 'username')" /> {{user}}
</div>
<hr />
<div ng-repeat="s in users | unique:'status'">
<input type="checkbox" ng-click="includeItem(s, 'status')"/> {{s}}
</div>
<ul>
<li ng-repeat="u in users | filter:filterFn">
<p>{{u.username}}</p>
<p>{{u.status}}</p>
</li>
</ul>
</body>
【问题讨论】:
-
能否提供相关代码sn-p?
-
您的 sn-p 工作正常。你到底想要什么?
-
请在问题本身中包含相关代码。问题应该是自包含的
-
当我第一次点击前。 julio,是的,这很好,但然后单击“创建”,我应该只看到:julio created。不包括用户垫
标签: javascript arrays angularjs object filter