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

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

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


当前回答

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

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

对于preventDefault只返回false

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

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

其他回答

补充来自@AndroidUniversity的答案。在单行中你可以这样写:

<component (click)="$event.stopPropagation()"></component>

IE (Internet Explorer)什么都不行。我的测试人员可以通过点击后面弹出窗口的按钮来破坏我的模式。所以,我听了我的模式屏幕div的点击声,并强制重新聚焦在一个弹出按钮上。

<div class="modal-backscreen" (click)="modalOutsideClick($event)">
</div>


modalOutsideClick(event: any) {
   event.preventDefault()
   // handle IE click-through modal bug
   event.stopPropagation()
   setTimeout(() => {
      this.renderer.invokeElementMethod(this.myModal.nativeElement, 'focus')
   }, 100)
} 

我不得不stopPropagation和preventDefault,以防止按钮展开上面的手风琴项。

所以…

@Component({
  template: `
    <button (click)="doSomething($event); false">Test</button>
  `
})
export class MyComponent {
  doSomething(e) {
    e.stopPropagation();
    // do other stuff...
  }
}

在函数后添加false将停止事件传播

<a (click)="foo(); false">click with stop propagation</a>

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

(click)="onEvent($event)"

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

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