gpt4 book ai didi

javascript - 如何在 Angular ng-repeat 中按类别键过滤数组中的对象

转载 作者:行者123 更新时间:2023-11-28 19:14:45 24 4
gpt4 key购买 nike

我正在尝试使用 Angular 过滤器仅显示按类别排序的标签

标签数组中的标签对象示例:

{
term: term,
id: id,
category: category
}

ng-repeat 标签:

<li ng-repeat="(k, m) in tags | filter: filterTags | orderBy:predicate:reverse"
ng-class="{'selected': m.selected}"
ng-click="selectTag(m)">
<div class="tag">{{m.term}}</div>
</li>

按类别排序单选按钮:

enter image description here

<div class="category-selection">
<ul>
<li>
<input type="radio" ng-model="catSort" name="brand" value="brand">
Brand
</li>
<li>
<input type="radio" ng-model="catSort" name="client" value="client">
Client
</li>

在排序单选按钮指令 Controller 中:

// Detect category sort
// Then apply the value to the filter function:

$scope.$watch('catSort', function(value) {
console.log(value);
tagsPanel = ScopeFactory.getScope('tagsPanel');
tagsPanel.filterTags(value);
});

我发现过滤器有自己的 Angular 模块,所以我的问题是,如何将类别字符串放入此过滤器中?

.filter('filterTags', function() {
return function(tags, category) {
return tags;
};
});

这是我捕获新类别的位置,我如何将值发送到上面的过滤器中?

$scope.$watch('catSort', function(value) {
console.log(value);
});

最佳答案

如果我没猜错的话。您想按类别过滤标签对象数组。

您可以调用作用域方法,如果它与当前选定的类别匹配,则返回 true。此方法的参数将是 ng-repeat 的 tag 对象。因此,您可以执行类似 return tag.category == $scope.catSort;

的检查

请查看下面的演示以及此处的 jsFiddle .

(我选择运动类别只是为了获得一些虚拟数据。)

angular.module('myApp', [])
.controller('mainCtrl', function ($scope) {
$scope.catSort = "football";
$scope.tags = [{
term: 'foot1',
id: 'id',
category: 'football'
}, {
term: 'foot2',
id: 'id2',
category: 'football'
}, {
term: 'base1',
id: 'id',
category: 'baseball'
}, {
term: 'base2',
id: 'id2',
category: 'baseball'
}, ];

$scope.filterTags = function (tag) {
//console.log(tag, $scope.catSort);
return tag.category == $scope.catSort;
};
});
ul {
list-style-type: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp" ng-controller="mainCtrl">Filter by category:
<div class="category-selection">
<ul>
<li>
<input type="radio" ng-model="catSort" name="football" value="football" />Football</li>
<li>
<input type="radio" ng-model="catSort" name="baseball" value="baseball" />Baseball</li>
</ul>
</div>Teams:
<ul>
<li ng-repeat="(index, tag) in tags | filter: filterTags" ng-class="{'selected': tag.selected}" ng-click="selectTag(tag)">
<div class="tag">{{tag.term}}</div>
</li>
</ul>
</div>

关于javascript - 如何在 Angular ng-repeat 中按类别键过滤数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30111381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com