我有一个存储在$scope.tree
对象中的树结构like this。我想创建一个过滤器,我可以将其应用于此树,将其缩小为this,以便能够像$scope.cut_tree = $filter('cutTree')($scope.tree)
那样进行smth,并获得缩小的输出。
但是我真的不知道该怎么做,到目前为止我尝试过的所有东西都没有让我到处都是,因为我最终改变了$ scope.tree本身。
更新
到目前为止我所拥有的:
app.filter("filterTree", ["$filter", function($filter) {
return function(tree) {
var newTree = [];
angular.forEach(tree, function(node, index) {
var newNode;
newNode = {
id: node.id,
sort_order: index,
children: $filter('filterTree')(node.children)
};
newTree.push(newNode);
});
return newTree;
};
}
]);
答案 0 :(得分:1)
创建一个只复制你想要的字段的递归函数应该相对容易。例如
var cutTree = function(original){
var result = {};
result.id = original.id;
result.name = original.name;
result.children = [];
for (var i=0; i<original.children.length; i++)
{
result.children.push(cutTree(original.children[i]));
}
return result;
}
然后你只需要定义一个过滤器来调用这个函数并返回它的结果。
答案 1 :(得分:1)
我在这个JsFiddle中做了一个有效的例子。
使用的过滤器如下:
angular.module('myApp').filter('cutTree', ['$filter',function ($filter) {
return function (tree) {
var res = [];
var sortOrder=0;
angular.forEach(tree, function(item) {
// Deep copy
var copy = angular.fromJson(angular.toJson(item))
res.push({
id:copy.id,
sort_order:sortOrder,
children:$filter('cutTree')(item.children)
})
sortOrder++;
});
return res;
};
}]);