У меня есть иерархическая модель данных с линиями продуктов, а затем сублинами, а затем сублинами сублиней и т. Д. То, что я пытаюсь сделать, это изолировать только сублины, которые являются непосредственно потомками (сыновьями не являются внуков) конкретной линии или сублинии.Вложенные фильтры в угловом для иерархической модели данных
Вот моя существующая модель данных:
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>
ли это способ, которым мы гнездятся фильтры в 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;
};
});
Html
<div ng-repeat="item in items | prodClassIsALine">
<!-- or <div ng-repeat="item in items | prodClassLineChild"-->
<p>{[{item.name}]}</p>
</div>
не работает. – pv1
Спасибо за помощь bresleveloper – pv1
приветствую моего друга – bresleveloper