Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 层次数据模型的角度嵌套过滤器_Javascript_Angularjs - Fatal编程技术网

Javascript 层次数据模型的角度嵌套过滤器

Javascript 层次数据模型的角度嵌套过滤器,javascript,angularjs,Javascript,Angularjs,我有一个层次化的数据模型,其中包括产品线,然后是子线,然后是子线的子线,等等。我试图做的是只分离出直接属于特定产品线或子线的子线(子线而非孙子线) 以下是我现有的数据模型: items:[ { "_id": "1", "description": "sth1", "name": "smname1", "level_type": "line", "ancestor": "", "descendant": "smname2" } },

我有一个层次化的数据模型,其中包括产品线,然后是子线,然后是子线的子线,等等。我试图做的是只分离出直接属于特定产品线或子线的子线(子线而非孙子线)

以下是我现有的数据模型:

items:[
  {
    "_id": "1",
    "description": "sth1",
    "name": "smname1",
    "level_type": "line",
    "ancestor": "",
    "descendant": "smname2"
   }
  },
  {
    "_id": "2",
    "description": "sth2",
    "name": "smname1",
    "level_type": "subline",
    "ancestor": "smname1",
    "descendant": ""
    }
  },
]
同样,对于上面的例子,我试图完成的另一件事是获得所有产品线的子产品。我尝试过但迄今为止不起作用的是:

控制器

$scope.prodClassIsALine = function(item) {
        return item.level_type=='line';
    };

    $scope.prodClassIsASubLineof = function(item) {
        return item.ancestor==$scope.prodClassIsALine.name;
};
悲剧性的提议只是想告诉你,我需要所有行的所有子项,即所有具有行的项目的祖先名称的项目

Html

<div ng-repeat="item in items  | filter:prodClassIsALine:prodClassIsASubLineof"> 
  <p>{[{item.name}]}</p>
</div> 
<div ng-repeat="item in items  | prodClassIsALine"> 
<!-- or <div ng-repeat="item in items  | prodClassLineChild"-->
  <p>{[{item.name}]}</p>
</div>

{[{item.name}]}

这就是我们在AngularJS中嵌套过滤器的方式吗?似乎过滤器正在遍历作为属性给出的列表,但除此之外,我无法详细了解它们是如何工作的。请帮忙

解决方案

在script.js中

//product is my ng-module
//filter to get all product classes that are lines
product.filter('prodClassIsALine', function() {
    return function(input) {
      var out = [];
      for (var i = 0; i < input.length; i++) {
        if (input[i].level_type=='line') {
            out.push(input[i])
        };
      };
      return out;
    };
});

//filter to get all children of product classes that are lines
product.filter('prodClassLineChild', function() {
    return function(input) {
      var out = [];
      var out2 = [];
      for (var i = 0; i < input.length; i++) {
        if (input[i].level_type=='line') {
            out2.push(input[i])
        };
      };
      for (var i = 0; i < out2.length; i++) {
        for (var j = 0; j < input.length; j++) {
            if (input[j].ancestor==out2[i].name) {
                out.push(input[j])
            };
        };
      };
      return out;
    };
});
//产品是我的ng模块
//筛选以获取所有为行的产品类
product.filter('prodclassil',function(){
返回函数(输入){
var out=[];
对于(变量i=0;i
Html

<div ng-repeat="item in items  | filter:prodClassIsALine:prodClassIsASubLineof"> 
  <p>{[{item.name}]}</p>
</div> 
<div ng-repeat="item in items  | prodClassIsALine"> 
<!-- or <div ng-repeat="item in items  | prodClassLineChild"-->
  <p>{[{item.name}]}</p>
</div>

{[{item.name}]}

你是这个意思吗

<div ng-repeat="item in items  | filter1 | filter2"> 
我的用法是class=“{catalogItem.is_FINAL | iif:'IsFinalCatalogItem':''}”

应该是这样的

myModule.filter('iif', function () {
    return function (input, trueValue, falseValue) {
        return input ? trueValue : falseValue;
    };
});
myModule.filter('prodClassIsALine', function() {
    return function(item) {
        return item.level_type=='line';
    };
});

p、 在angular 1.2中,他们添加了标准iif语法,但是它不起作用。感谢BresDeveloper提供的帮助