javascript - 从指令在主机上触发事件

标签 javascript angular

我正在尝试自动关闭 NG Bootstrap alert一段时间后。警报已经有我在组件中使用的关闭事件。我正在添加额外的超时功能作为指令,它应该能够触发关闭事件本身。是这样的吗?

close-on-timeout.directive.ts

import { Directive, ElementRef, HostBinding, Input, OnInit } from '@angular/core';

@Directive({
  selector: '[appCloseOnTimeout]'
})
export class CloseOnTimeoutDirective implements OnInit {
  @Input() appCloseOnTimeout: number;
  @HostBinding('close') close: CloseEvent;

  constructor () {}

  ngOnInit () {
    setTimeout (() => this.close(), this.appCloseOnTimeout);
  }
}

我希望能够像这样使用指令:

<ngb-alert
  [dismissible]="alert.dismissible"
  [type]="alert.type"
  (close)="onClose(i)"
  [appCloseOnTimeout]="1000"
>

访问宿主元素的关闭事件的最佳方式是什么?我已经尝试使用 ElementRef 代替,但仍然找不到访问事件的方法。

最佳答案

使用类似...

import { Directive, ElementRef, HostBinding, Input, OnInit, Output, EventEmitter } from '@angular/core';

@Directive({
 selector: '[appCloseOnTimeout]'
})
export class CloseOnTimeoutDirective implements OnInit {
 @Input() appCloseOnTimeout: number;
 @Output() close:EventEmitter<any> = new EventEmitter();

 constructor () {}

 ngOnInit () {
  setTimeout (() => this.closeWrapp(), this.appCloseOnTimeout);
 }

 closeWrapp(){
  this.close.emit()
 }
}

关于javascript - 从指令在主机上触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53538466/

相关文章:

javascript - 在 Javascript 中对对象属性执行字符串方法

javascript - 将geoJSON加载到数据层时如何捕获异常

ionic-framework - ionic2 货币格式在设备上损坏

html - OnChange typescript 输入

javascript - 如何在 html 输入中创建多级对象?

javascript - 启用/禁用下拉菜单 - Javascript

angular - 如何在 html View 中显示表单控件的值?

子模块的 Angular 合并路线

javascript - 无法绑定(bind)到 'mode',因为它不是 'mat-sidenav' 的已知属性

javascript - 如何过滤掉非字母、数字或标点符号的字符