gpt4 book ai didi

angularjs - 仅向父作用域发出事件的scope.$parent.$emit() 是一个好习惯吗?

转载 作者:行者123 更新时间:2023-12-02 22:21:29 25 4
gpt4 key购买 nike

为什么我使用 scope.$parent().$emit() 而不是 scope.$emit() 是当指令使用 scope:true 时 还有一个指令使用 scope:true,它们被放置在同一个 DOM 节点上。

然后 scope.$emit() 也会向另一个指令发出事件,并且可以像父作用域一样被捕获。但是 scope.$parent().$emit() 只会向父级发出事件。使用scope.$parent().$emit()好吗?

其他指令是否可以捕获事件似乎并不重要,但我不确定这一点。所以也许ONLY发送给父级在某些情况下可能会很好。
这是一个例子plunk

“第二指令”事件只能由 MainCtrl 捕获。但“second-directive-two”可以被MainCtrl和第一个指令捕获。

最佳答案

这是相关问题:How to stop $broadcast events in AngularJS?

您可以使用

$rootScope.$broadcast('second-directive-two', 'from second');

而不是

$scope.$parent().$emit('second-directive-two', 'from second');

并取消 Controller 中的事件处理

$scope.$on('second-directive-two',function(event,args){
event.preventDefault();
});

如果事件已被阻止,则不要在 first 指令中处理事件“second-directive-two”

$scope.$on('second-directive-two',function(event,args){
if (!event.defaultPrevented) {
// do useful job
}
});

这里是plunk

更新:

为什么这不是好的做法?

在这种情况下,您将受到 DOM 层次结构的束缚。想象一下,您必须将指令 First 移至partial 并通过 ng-include 包含它。范围层次结构已更改。 $scope.$parent().$emit() 从这一刻起就不起作用了。而且您花了时间来解决这个问题。

通常$scope.$parent().$emit()生成潜在的问题代码

关于angularjs - 仅向父作用域发出事件的scope.$parent.$emit() 是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19925441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com