【问题标题】:Is there any methods in Angular to walk scope tree?Angular中是否有任何方法可以遍历范围树?
【发布时间】: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 来广播事件和循环摘要 $,但将来会发生什么我现在不知道.

你可以试试 http://jsfiddle.net/olegdunkan/E7ZBq/

【问题讨论】:

  • 使用 $broadcast 会导致性能贪婪,但这是个好问题!
  • $broadcast 足够好,如果范围内的听众不多,也不会贪婪地走路,但对于其他情况,我同意你的看法。

标签: angularjs


【解决方案1】:

如果要使用 angularjs 构建树,则必须使用嵌套模板。 这是一个组件: https://github.com/JimLiu/angular-ui-tree

【讨论】:

    猜你喜欢
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多