在Angular中停止鼠标事件传播的最简单方法是什么?
我应该传递特殊的$event对象和调用stopPropagation()自己或有一些其他的方式。
例如,在Meteor中,我可以简单地从事件处理程序返回false。
在Angular中停止鼠标事件传播的最简单方法是什么?
我应该传递特殊的$event对象和调用stopPropagation()自己或有一些其他的方式。
例如,在Meteor中,我可以简单地从事件处理程序返回false。
当前回答
这招对我很管用:
mycomponent.component.ts:
action(event): void {
event.stopPropagation();
}
mycomponent.component.html:
<button mat-icon-button (click)="action($event);false">Click me !<button/>
其他回答
在事件上调用stopPropagation来阻止传播:
(event)="doSomething($event); $event.stopPropagation()"
对于preventDefault只返回false
(event)="doSomething($event); false"
事件绑定允许执行按顺序执行的多条语句和表达式(由;比如*。ts文件。 如果是false,最后一个表达式的结果将导致preventDefault被调用。所以要小心表达式返回的内容(即使只有一个)
用JavaScript禁用href链接
<a href="#" onclick="return yes_js_login();">link</a>
yes_js_login = function() {
// Your code here
return false;
}
它应该如何在TypeScript和Angular中工作(我的版本:4.1.2)
Template<a class="list-group-item list-group-item-action" (click)="employeesService.selectEmployeeFromList($event); false" [routerLinkActive]="['active']" [routerLink]="['/employees', 1]">
RouterLink
</a>
TypeScript
public selectEmployeeFromList(e) {
e.stopPropagation();
e.preventDefault();
console.log("This onClick method should prevent routerLink from executing.");
return false;
}
但是它没有禁用routerLink的执行!
我不得不stopPropagation和preventDefault,以防止按钮展开上面的手风琴项。
所以…
@Component({
template: `
<button (click)="doSomething($event); false">Test</button>
`
})
export class MyComponent {
doSomething(e) {
e.stopPropagation();
// do other stuff...
}
}
补充来自@AndroidUniversity的答案。在单行中你可以这样写:
<component (click)="$event.stopPropagation()"></component>
如果您希望能够将此添加到任何元素,而不必一遍又一遍地复制/粘贴相同的代码,您可以制作一个指令来完成此操作。如下图所示:
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>