我正在尝试为产品列表创建条件过滤器,它工作正常,直到我更改产品模型以允许多个类别。一旦发生这种情况,过滤器就会破裂并显示出来 Broken Filter
这是产品的json结构的一个例子
myApp.controller('myCtrl', function ($scope, Products) {
$scope.data = Products;
$scope.filter = {};
$scope.categories = ['category','type','collection','designer'];
$scope.addProps = function(obj, array) {
if (typeof array === 'undefined') {
return false;
}
return array.reduce(function (prev, item) {
if (typeof item[obj] === 'undefined') {
return prev;
}
return prev + parseFloat(item[obj]);
}, 0);
}
$scope.getItems = function (obj, array) {
return (array || []).map(function (w) {
return w[obj];
}).filter(function (w, idx, arr) {
if (typeof w === 'undefined') {
return false;
}
return arr.indexOf(w) === idx;
});
};
// matching with AND operator
$scope.filterByPropertiesMatchingAND = function (data) {
var matchesAND = true;
for (var obj in $scope.filter) {
if( $scope.filter.hasOwnProperty(obj) ) {
if (noSubFilter($scope.filter[obj])) continue;
if (!$scope.filter[obj][data[obj]]) {
matchesAND = false;
break;
}
}
}
return matchesAND;
};
// matching with OR operator
$scope.filterByPropertiesMatchingOR = function (data) {
var matchesOR = true;
for (var obj in $scope.filter) {
if( $scope.filter.hasOwnProperty(obj) ) {
if (noSubFilter($scope.filter[obj])) continue;
if (!$scope.filter[obj][data[obj]]) {
matchesOR = false;
} else {
matchesOR = true;
break;
}
}
}
return matchesOR;
};
这是过滤器的控制器
{{1}}
如何只访问类别的值,然后才显示唯一的类别?这是fiddle的链接,我试图让这段代码在过去2小时内用于js小提琴,但无济于事。
更新了小提琴http://jsfiddle.net/48qLjg2z/7/ 1.提示json文件
答案 0 :(得分:0)
答案 1 :(得分:0)
我猜这是在Cat 3
之后的尾随逗号,在这里:
"category": [{
"name": "Cat 5",
"name": "Cat 3",
}],
" JavaScript从一开始就允许在数组文字中使用尾随逗号...但是,JSON不允许使用尾随逗号。"
来源: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas
<小时/> 编辑:作为资源,您始终可以在此处验证JSON:https://jsonlint.com/