【发布时间】:2014-03-03 13:59:57
【问题描述】:
Angular 中有什么方法可以遍历作用域树吗?
现在我用这个方法:
app.directive('node', function() {
return {
link:function(scope) {
scope.$on('walk', function(event, fn) {
fn(scope);
});
},
scope: true
};
});
代码中的某处为了行走我发出事件
app.controller('Catalog', function($scope) {
var nodes = [];
$scope.$broadcast('walk', function(scope) {
nodes.push(scope);
});
});
例如,对于页面布局:
<div ng-controller="Catalog">
<div node="A">
<div node="A1">
</div>
<div node="A2">
<div node="A21">
</div>
</div>
</div>
<div node="B">
</div>
</div>
在var nodes = [] 中将是A, A1, A2, A21, B
但是这个实现依赖于 Angular(DFS 或 WDS)中 tree walker 的内部实现,我知道 Angular JS 使用 DFS 来广播事件和循环摘要 $,但将来会发生什么我现在不知道.
【问题讨论】:
-
使用 $broadcast 会导致性能贪婪,但这是个好问题!
-
$broadcast 足够好,如果范围内的听众不多,也不会贪婪地走路,但对于其他情况,我同意你的看法。
标签: angularjs