🐞 bug报告
受影响的软件包
platform-browser
是否为回归?
否。
描述
使用语法 namespace:event
命名空间自定义事件将失败。例如,绑定到 MDCTabBar:activated
事件将失败(来源)。
<mwc-tab-bar (MDCTabBar:activated)="onTabActivated($event)"></mwc-tab-bar>
问题是Angular会认为你在监听一个全局 activated
事件目标上的 MDCTabBar
事件(来源)。
可能的解决方案
如果Angular不知道事件目标,那么假设它是事件名称的一部分,或者添加语法告诉Angular直接监听事件名称。我想在另一个问题中看到了 ^
的语法。
例如:
<!-- hey Angular, don't mess with the event name -->
<mwc-tab-bar (^MDCTabBar:activated)="onTabActivated($event)"></mwc-tab-bar>
🔬 最小复现
不需要。
🔥 异常或错误
Unsupported event target null for event activated
🌍 你的环境
Angular版本:
platform-browser: 7.0.3
还有其他相关信息吗?
8条答案
按热度按时间wnavrhmk1#
这是解析的地方:packages/compiler/src/template_parserbinding_parser.ts#L335
编辑:类似这样的代码可以工作:
du7egjpx2#
解:如果有人将来降落在这里,我想到了这个丑陋的工作方法。
$x_{1}a_{0}b_{1}x$
$x_{1}a_{1}b_{1}x$
hgqdbh6s3#
由于
MDCTabBar:activated
是一个完全有效的(如果令人惊讶的话!)DOM事件名称,我认为我们不应该有特殊的语法(如(^MDCTabBar:activated)
- 我们应该检查一个已知的集合(document,window,etc
)并避免对其进行操作,而是将其传递下去...hmae6n7t4#
在这种情况下,
document:activated
和window:activated
也完全是有效的DOM事件名称,为什么不允许它们?nfs0ujit5#
希望为这个PR(以及测试)
oknrviil6#
重新确认已经说过的内容 - 一个名为
:
的事件(例如MDCTabBar:activated
)是一个 valid event name,而 some implementations 使用它!这里的问题是,Angular 使用
:
来表示要添加事件的目标。在这一点上改变:
的意义将是一个巨大的破坏性更改。不确定如何解决这个问题,但从用户的Angular 来看,这显然是一个 bug。osh3o9ms7#
有任何更新吗?我们在https://shop.battle.net/上广泛使用了Lit web组件,这些组件会发出包含
:
(例如,blz-video:state-change
)的事件。令人沮丧的是,我们不得不手动添加监听器,而不是利用Angular的绑定语法。zzwlnbp88#
我找到了一个解决方法!在查看代码后,我注意到_splitAt()只检查
character
的第一个示例(在这个例子中是:
)。所以我们只需要在事件前加上:
来欺骗解析器。使用OP中的例子,解决方法看起来像这样: