Angular 将多个按钮的事件捕获到一个方法中
Angular capture events from multiple buttons into a single method
我有一些代码,我试图在 mouseenter 上做一些事情,并对其他所有鼠标事件做一些事情。
就像:
if (this.button sends mouseenter event) {
do something
} else if (any other mouse event) {
do something else
}
app.component.html
<div id="one">
<button type="button"
(mouseenter)="listen($event.target)"
(mouseleave)="listen($event.target)"
(mousedown)="listen($event.target)"
(mouseup)="listen($event.target)">
</button>
</div>
<div id="two">
<button type="button"
(mouseenter)="listen($event.target)"
(mouseleave)="listen($event.target)"
(mousedown)="listen($event.target)"
(mouseup)="listen($event.target)">
</button>
</div>
<div id="three">
<button type="button"
(mouseenter)="listen($event.target)"
(mouseleave)="listen($event.target)"
(mousedown)="listen($event.target)"
(mouseup)="listen($event.target)">
</button>
</div>
app.component.ts
listen(e) {
// I need to get the parent's id
}
我想做的是:
示例:
如果#id 的按钮事件是 mouseenter .... 做点什么
别的
如果它是任何其他鼠标事件....做其他事情。
我试图避免必须添加这个:
(mouseenter)="listen($event.target)"
(mouseleave)="listen($event.target)"
(mousedown)="listen($event.target)"
(mouseup)="listen($event.target)"
每个按钮。
简而言之,我该怎么做?
而不是在每个按钮的每个事件上使用 (mouseenter)="listen($event.target.parentElement.id)",这会将父元素(如果有的话)的 ID 传递给您的函数。
您可以在函数顶部为 id 声明一个变量,并只将事件传递给它,如下所示:
在 component.html 中:
<div id="one">
<button type="button"
(mouseenter)="listen($event)"
(mouseleave)="listen($event)"
(mousedown)="listen($event)"
(mouseup)="listen($event)">
</button>
</div>
在component.ts中:
listen(e) {
const id = e.target.parentElement.id;
if (id === "firstId") {
//do something
} else if (id === "secondId") {
//do something else
}
}
您可以为不同的事件绑定不同的处理程序。尝试以下
模板
<div id="one">
<button type="button"
(mouseenter)="mouseEnterOne($event.target)"
(mouseleave)="notMouseEnter($event.target)"
(mousedown)="notMouseEnter($event.target)"
(mouseup)="notMouseEnter($event.target)">
</button>
</div>
<div id="two">
<button type="button"
(mouseenter)="mouseEnterTwo($event.target)"
(mouseleave)="notMouseEnter($event.target)"
(mousedown)="notMouseEnter($event.target)"
(mouseup)="notMouseEnter($event.target)">
</button>
</div>
<div id="three">
<button type="button"
(mouseenter)="mouseEnterThree($event.target)"
(mouseleave)="notMouseEnter($event.target)"
(mousedown)="notMouseEnter($event.target)"
(mouseup)="notMouseEnter($event.target)">
</button>
</div>
控制器
export class AppComponent implements OnInit {
constructor() { }
ngOnInit() {
}
mouseEnterOne(target) {
// handle event
}
mouseEnterTwo(target) {
// handle event
}
mouseEnterThree(target) {
// handle event
}
notMouseEnter(target) {
// handle event
}
}
您还可以为模板中的事件绑定多个处理程序。
例如
<button type="button"
(mouseenter)="mouseEnterOne($event.target); anotherHandler($event); oneOtherHanlder('one')"
</button>
我有一些代码,我试图在 mouseenter 上做一些事情,并对其他所有鼠标事件做一些事情。
就像:
if (this.button sends mouseenter event) {
do something
} else if (any other mouse event) {
do something else
}
app.component.html
<div id="one">
<button type="button"
(mouseenter)="listen($event.target)"
(mouseleave)="listen($event.target)"
(mousedown)="listen($event.target)"
(mouseup)="listen($event.target)">
</button>
</div>
<div id="two">
<button type="button"
(mouseenter)="listen($event.target)"
(mouseleave)="listen($event.target)"
(mousedown)="listen($event.target)"
(mouseup)="listen($event.target)">
</button>
</div>
<div id="three">
<button type="button"
(mouseenter)="listen($event.target)"
(mouseleave)="listen($event.target)"
(mousedown)="listen($event.target)"
(mouseup)="listen($event.target)">
</button>
</div>
app.component.ts
listen(e) {
// I need to get the parent's id
}
我想做的是:
示例:
如果#id 的按钮事件是 mouseenter .... 做点什么 别的 如果它是任何其他鼠标事件....做其他事情。
我试图避免必须添加这个:
(mouseenter)="listen($event.target)"
(mouseleave)="listen($event.target)"
(mousedown)="listen($event.target)"
(mouseup)="listen($event.target)"
每个按钮。
简而言之,我该怎么做?
而不是在每个按钮的每个事件上使用 (mouseenter)="listen($event.target.parentElement.id)",这会将父元素(如果有的话)的 ID 传递给您的函数。
您可以在函数顶部为 id 声明一个变量,并只将事件传递给它,如下所示:
在 component.html 中:
<div id="one">
<button type="button"
(mouseenter)="listen($event)"
(mouseleave)="listen($event)"
(mousedown)="listen($event)"
(mouseup)="listen($event)">
</button>
</div>
在component.ts中:
listen(e) {
const id = e.target.parentElement.id;
if (id === "firstId") {
//do something
} else if (id === "secondId") {
//do something else
}
}
您可以为不同的事件绑定不同的处理程序。尝试以下
模板
<div id="one">
<button type="button"
(mouseenter)="mouseEnterOne($event.target)"
(mouseleave)="notMouseEnter($event.target)"
(mousedown)="notMouseEnter($event.target)"
(mouseup)="notMouseEnter($event.target)">
</button>
</div>
<div id="two">
<button type="button"
(mouseenter)="mouseEnterTwo($event.target)"
(mouseleave)="notMouseEnter($event.target)"
(mousedown)="notMouseEnter($event.target)"
(mouseup)="notMouseEnter($event.target)">
</button>
</div>
<div id="three">
<button type="button"
(mouseenter)="mouseEnterThree($event.target)"
(mouseleave)="notMouseEnter($event.target)"
(mousedown)="notMouseEnter($event.target)"
(mouseup)="notMouseEnter($event.target)">
</button>
</div>
控制器
export class AppComponent implements OnInit {
constructor() { }
ngOnInit() {
}
mouseEnterOne(target) {
// handle event
}
mouseEnterTwo(target) {
// handle event
}
mouseEnterThree(target) {
// handle event
}
notMouseEnter(target) {
// handle event
}
}
您还可以为模板中的事件绑定多个处理程序。 例如
<button type="button"
(mouseenter)="mouseEnterOne($event.target); anotherHandler($event); oneOtherHanlder('one')"
</button>