使用Angular 1.6 ng-switch在过滤​​器列表中显示键和值时

时间:2017-06-30 16:20:14

标签: javascript angularjs angular-controller

我正在尝试为产品列表创建条件过滤器,它工作正常,直到我更改产品模型以允许多个类别。一旦发生这种情况,过滤器就会破裂并显示出来 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文件

2 个答案:

答案 0 :(得分:0)

你的小提琴出了点问题。尝试创建一个新的小提琴

我创建了new one并显示了不同的错误(产品未定义)。

 var products = product_list

注意:我使用过Angular 1.5

答案 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/