【发布时间】:2016-01-18 17:06:48
【问题描述】:
我正在为一个应用程序开发一个搜索页面。我在 google 上搜索了很多,但除了过滤器的零散信息外,我找不到任何东西。
我需要的是一个包含某些元素列表的复选框列表(如示例中的语言)。我已经为客户的名称添加了一个排序过滤器,但我想将过滤器添加到辅助表中,比如(正如我所说的)语言。
客户:
$scope.clientes = [
{ 'id': '3', 'name': 'Susana', 'surname': 'Rodríguez Torrón', 'languages': [{'id': 1, 'name': 'english'}, {'id': 2, 'name': 'spanish'}] },
{ 'id': '4', 'name': 'Pablo', 'surname': 'Campos Pérez', 'languages': [{'id': 3, 'name': 'german'}, {'id': 5, 'name': 'japanese'}] }
];
语言:
$langs = [
{'id': 1, 'name': 'english' },
{'id': 2, 'name': 'spanish' },
{'id': 3, 'name': 'german' },
{'id': 4, 'name': 'japanese' }
];
HTML(用于复选框列表):
<div class="row">
<div class="col-md-12">
<h4>Languages</h4>
<div class="checkbox-block" ng-repeat="lang in langs">
<label class="checkbox" for="{{lang.id}}">
<input type="checkbox" ng-model="langs[lang.id]" name="languages_group" id="{{lang.id}}" />
<span ng-bind-html="lang.name"></span>
</label>
</div>
</div>
</div>;
客户:
<div class="client-wrapper" ng-repeat="client in clients | orderBy:order_field:order_type | filter:query">
... all the data of every client showed here ...
</div>;
在数组$scope.langs 中,我检查了检查,现在我想将它与每个客户端进行比较,并仅显示具有该语言的客户端。可以做到吗?你能帮我知道怎么做吗??
编辑: 过滤器的代码。
app.filter('langsFilter', function () {
return function (input, $scope) {
var output = [];
to_langs = $scope.filters.langs;
var trueContro = false;
for (var lang in to_langs) {
if (to_langs[lang] === true) {
trueContro = true;
}
}
for (var client in input) {
for (var i = 0; i < input[client].langs.length; i++) {
if (trueContro === true) {
if (to_langs[client.langs[i]]) {
output.push(input[client]);
}
} else {
output.push(input[client]);
}
}
}
return output;
};
});
正如你所说,我发布了我正在使用的代码。我知道它现在不起作用,但它会让您了解我需要实现的目标:
我们有一组客户端,除了另一个过滤器,这个过滤器会比较每个客户端的语言,只显示有这些语言的客户端。
【问题讨论】:
-
谷歌角度客户过滤器。
-
问之前google了一下,没找到解决办法。
-
你尝试了什么?也许考虑发布您为过滤功能编写的代码。
-
提示:使用过滤器并不高效,因为它必须在每个摘要中重新评估这些过滤器。相反,仅当用户更改其中一个时,才生成与所有过滤器匹配的记录列表作为单独的范围属性,并改为绑定到该属性。额外提示:不要忘记在
ng-repeat表达式中使用track by以允许对不变的行重用 DOM。 -
我已经发布了代码,但它不完整并且无法运行。只为给你看。
标签: javascript angularjs angularjs-filter