gpt4 book ai didi

javascript - 在AngularJS中,为什么$emit事件可以被取消,而$broadcast事件却不能?

转载 作者:行者123 更新时间:2023-11-30 11:23:51 26 4
gpt4 key购买 nike

是不是因为父子作用域的一对多关系?

最佳答案

$emit “通过范围层次结构向上调度事件名称”,而$broadcast “向所有子作用域(及其子作用域)向下派发一个事件名称”

查看 source code我们可以看到 $emitevent.stopPropagation()event.preventDefault()

$emit: function(name, args) {
var empty = [],
namedListeners,
scope = this,
stopPropagation = false,
event = {
name: name,
targetScope: scope,
stopPropagation: function() {stopPropagation = true;},
preventDefault: function() {
event.defaultPrevented = true;
},
defaultPrevented: false
},
// ...

$broadcast 只有 event.preventDefault()

$broadcast: function(name, args) {
var target = this,
current = target,
next = target,
event = {
name: name,
targetScope: target,
preventDefault: function() {
event.defaultPrevented = true;
},
defaultPrevented: false
};
// ...

这让我相信该机制仅依赖于 DOM bubbling : 事件向上传播并且可以阻止向上传播(使用event.stopPropagation()),但是没有阻止向下传播的机制。

关于javascript - 在AngularJS中,为什么$emit事件可以被取消,而$broadcast事件却不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48775664/

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