【问题标题】:Angular 2 Event Handling and Custom EventsAngular 2 事件处理和自定义事件
【发布时间】:2016-10-10 16:02:45
【问题描述】:

我目前正在开展一个项目,该项目涉及在 Angular 2 中创建一个组件库以供应用团队使用。我最近创建了一个模态组件,但我遇到了一些可访问性问题。具体来说,我希望在用户选择 ESC 键时关闭模式,但如果存在应该使用 ESC 事件的下拉菜单等内部组件则不会。由于模态结构允许通过<ng-content> 显示各种内容,这使情况变得更加困难,因为我无法保证模态内部会是什么。

理想情况下,我想找到一种方法来查看投影组件是否正在侦听 (keydown)(keyup) 事件,或者更好的是,找到一种方法来查看另一个组件是否已经使用或处理了该事件。我知道如果我正在编写一个应用程序而不是提供一个库,我可以为投影组件内的事件添加一个属性,或者创建一个自定义事件处理程序,如here 所述,但不幸的是我没有这些选项。

【问题讨论】:

    标签: javascript events angular typescript modal-dialog


    【解决方案1】:

    使用 RxJS 怎么样?在您的组件中:

    isShowModal: boolean = false;
    private keyup$ = Observable.fromEvent(document, "keyup");
    private keyupSubcribe: any;
    
    ngOnInit() {
        this.keyupSubscribe = this.keyup$.subscribe((e: KeyboardEvent) => {
            if(this.isShowModal && e.keyCode === 27) {
                 this.isShowModal = false;
            }
        });
    }
    
    ngOnDestroy() {
        this.keyupSubscribe.unsubscribe();
    }
    
    onShowModal() {
        this.isShowModal = true;
    }
    

    在你的模板中:

    ...
    <button (click)="onShowModal($event)">Show Modal</button>
    ...
    <your-modal *ngIf="isShowModal"></your-modal>
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多