使用几个$ parent来播放$

时间:2014-08-01 21:06:03

标签: angularjs

我有以下标记:

<div class="grandparent">
    <div class="parent" ng-repeat="parent in parents">
        <div class="child" ng-repeat="child in parent.children">
            <div class="grandchild" ng-repeat="grandchild in child.grandchild">

现在,.grandchild希望将$broadcast内容转移到另一个.grandchild。这可以通过$rootScope.$broadcast('SOMETHING');完成。

但是我不想使用$rootScope,因此$ digest不会贯穿所有内容。相反,我想做scope.$parent.$parent.$parent.$broadcast('SOMETHING')

之类的事情

虽然这很难看,但最终会减少元素,因为它只会通过范围grandparent

还有其他建议吗? (为了这个例子的目的,假设我必须使用broadcast。所以请不要评论说我不应该使用这个)

2 个答案:

答案 0 :(得分:0)

我通常会避免将事件侦听器附加到各个范围。

执行所需操作的有效方法是使用$rootScope.$on$rootScope.$emit(不是$broadcast)。 $emit$broadcast之间的区别在于$emit不会向下传播,因此它只影响那些直接订阅的人。

答案 1 :(得分:0)

点击AngularJS事件不会在任何地方触发对$digest的调用。它只会呼叫所有注册用户。如果您在$broadcast$scope$rootScope,则无关紧要。调用摘要的唯一事情是指令(可能是ngClick),它执行触发事件的代码(使用broadcast或emit),因为该指令将调用$apply$apply现在在{是$digest上调用$rootScope!你无法阻止这种行为。

因此,您所做的事情并不重要,您最有可能从$digest开始$rootScope周期。只要您没有严重的性能问题,就应该坚持下去并且不要尝试预先优化您的代码。