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提供的帮助