在Angular中停止鼠标事件传播的最简单方法是什么?

我应该传递特殊的$event对象和调用stopPropagation()自己或有一些其他的方式。

例如,在Meteor中,我可以简单地从事件处理程序返回false。


当前回答

我使用

<... (click)="..;..; ..someOtherFunctions(mybesomevalue); $event.stopPropagation();" ...>...

简而言之,只需用';'分隔其他事物/函数调用,并添加$event.stopPropagation()

其他回答

在事件上调用stopPropagation来阻止传播:

(event)="doSomething($event); $event.stopPropagation()"

对于preventDefault只返回false

(event)="doSomething($event); false"

事件绑定允许执行按顺序执行的多条语句和表达式(由;比如*。ts文件。 如果是false,最后一个表达式的结果将导致preventDefault被调用。所以要小心表达式返回的内容(即使只有一个)

如果你在一个绑定到事件的方法中,简单地返回false:

@Component({
  (...)
  template: `
    <a href="/test.html" (click)="doSomething()">Test</a>
  `
})
export class MyComp {
  doSomething() {
    (...)
    return false;
  }
}

这解决了我的问题,从防止一个事件被一个孩子触发:

doSmth () { // what ever } < div(点击)= " doSmth ()" > < div(点击)= " $ event.stopPropagation ()" > <组件> < /组件> < / div > < / div >

最简单的方法是在事件处理程序上调用停止传播。$event在Angular 2中的工作原理是一样的,它包含了正在发生的事件(鼠标点击、鼠标事件等等):

(click)="onEvent($event)"

在事件处理程序中,我们可以停止传播:

onEvent(event) {
   event.stopPropagation();
}

如果您希望能够将此添加到任何元素,而不必一遍又一遍地复制/粘贴相同的代码,您可以制作一个指令来完成此操作。如下图所示:

import {Directive, HostListener} from "@angular/core";
    
@Directive({
    selector: "[click-stop-propagation]"
})
export class ClickStopPropagation
{
    @HostListener("click", ["$event"])
    public onClick(event: any): void
    {
        event.stopPropagation();
    }
}

然后将它添加到你想要它的元素:

<div click-stop-propagation>Stop Propagation</div>