【发布时间】:2016-01-13 14:45:28
【问题描述】:
我现在开始学习 AngularJS,但过滤器有一些问题。 我需要应用两种类型的过滤器,但我不知道如何。
我有一个设备列表 JSON,如下所示:
[{
"ID": 1,
"Name": "Device 1",
"Price": 1998.92,
"Colors": [{
"ColorCode": "Red",
"ColorName": "#FF0000"
},
{
"ColorCode": "Green",
"ColorName": "#2EFE2E"
}],
"Type": {
"TypeID": 1,
"TypeName": "Mobile device"
},
"Company": {
"CompanyID": 1,
"CompanyName": "Alcatel"
}
}]
我这样显示列表:
<div ng-repeat="device in devices | filter:companyFilters | filter:colorFilters">
<span>{{device.Company.CompanyID}}</span> // 1
<span>{{device.Company.CompanyName}}</span> // Google
<span>{{device.Name}}</span> // Nexus 6P
</div>
我应用了一些过滤器,但有两个过滤器我不明白如何应用。
过滤器 1:
- 按选定项过滤项目的公司复选框列表 公司。
过滤器 2:
- 一种颜色过滤器,当单击颜色时会过滤设备 有那种颜色的
对于公司过滤器,我有这个复选框列表:
<div ng-repeat="company in deviceCompanies">
<input type="checkbox" data-ng-model="companyFilters" id="{{company.CompanyID}}" data-ng-true-value='{{company.CompanyID}}' data-ng-false-value='' />
<label for="{{company.CompanyID}}">{{company.CompanyName}}</label>
</div>
在控制器端我有这个:
$scope.companyFilters = [];
对于滤色器,我有这个:
<div>
<a ng-click="???">All</a>
<div ng-repeat="color in deviceColors" style="display:inline-block; margin-right:10px;">
<div style="width:20px;height:20px;background-color:{{color.ColorCode}}"></div>
<a ng-model="selColor" data-ng="color.ColorCode" ng-click="colorFilters">{{color.ColorName}}</a>
</div>
</div>
在控制器上:
$scope.colorFilters = function (device) {
if (!$scope.selColor)
return true;
for (var i = 0; i < device.Colors.length; i++) {
if (device.Colors[i].ColorCode == $scope.selColor)
return true;
}
return false;
};
但它不起作用...... 谁能告诉我如何应用这些过滤器?
【问题讨论】:
-
filter on
ng-repeat需要接收完整的数组并返回新的过滤数组