目前,我有一个建议,菜单组件,当相应的事件发生时,我增加了相应的变量(pressedUp,pressedDown,pressedEnter使用在父组件)suggestion-menu在其模板.
<suggestion-menu
[pressedUp]="pressedUp"
[pressedDown]="pressedDown"
[pressedEnter]="pressedEnter"
[query]="someQuery"
(onSuggestionClicked)="doSomething($event)">
</suggestion-menu>
Run Code Online (Sandbox Code Playgroud)
然后在建议菜单组件中我用这样的东西检测到变化:
ngOnChanges(inputChanges) {
if (inputChanges.pressedUp) {
//do Something
}
if (inputChanges.pressDown) {
//do Something
}
if (inputChanges.pressedEnter) {
//do Something
}
}
Run Code Online (Sandbox Code Playgroud)
这可以用更好,更少hacky和更多面向事件的方式来完成吗?我希望通过建议菜单组件监听窗口中发生的所有关键事件.然后,如果它是重要的东西(例如向上,向下或输入按下),它将需要自己处理它.
您应该使用HostListener装饰器:https://angular.io/docs/ts/latest/api/core/index/HostListener-interface.html
import {Component, NgModule, HostListener} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
</div>
`,
})
export class App {
name:string;
constructor() {
this.name = 'Angular2'
}
@HostListener('window:keyup', ['$event'])
onKeyup(event: any) {
console.log('keyup..', event);
}
@HostListener('window:keyup.enter', ['$event', 'undefined'])
@HostListener('window:click', ['undefined', '$event'])
onEnterOrClick(enterEvent, mouseEvent) {
if (enterEvent) {
console.log('enter..');
}
if (mouseEvent) {
console.log('click..');
}
}
@HostListener('window:keyup.arrowUp')
onarrowUp() {
console.log('arrowUp..');
}
@HostListener('window:keyup.arrowDown')
onarrowDown() {
console.log('arrowDown..');
}
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
https://plnkr.co/edit/gx49kaDYFvBVlHo18bru?p=preview
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |