Fork Me On Github

事实事件有两种定义方式

@Output 声明事件

  1. angular 通常方式,使用 @Output()方式
// 在组件声明一个事件
@Output() public tapped = new EventEmitter();

// 组件中触发事件
this.tapped.emit();

调用组件

<app-custom (tapped)="onTapped()">

public onTapped() {
    // TODO
}

优点

不需要考虑事件是否有接收,同时可以被接收多次,而且可以接受父页面上的值。

缺点

没办法判断事件是否注册了,传递值只能传一个,可以把多个值合并成一个 object 传递

// 在组件声明一个事件
@Output() public tapped = new EventEmitter<number>();

// 组件中触发事件
this.tapped.emit(1);

调用组件

<app-custom (tapped)="onTapped($event)">

public onTapped(e: number) {
    // TODO
}

直接把方法当值传递

  1. 非正常方式,使用 @Input()方式
// 在组件声明一个值
@Input() public tapped: () => void;

// 组件中触发事件
this.tapped && this.tapped();

调用组件

<app-custom [tapped]="onTapped">

public onTapped() {
    // TODO
}

优点

可以同时传递多个值,可以判断是否有事件

缺点

没法同时接受父页面上的值,而且这个方法的内部 this 为子组件,所以就没法调用父组件的方法或属性。


private refresh()

public onTapped() {
    this.refresh();   // error refresh is undefined
}
点击查看全文
标签: angular
0 4 0
在angular中实现文件下载自动获取响应头中的文件名,怎么获取响应头
angular 11 返回上一页保留页面数据页面内容不变
响应式表单,FormGroup中嵌套FormGroup,或嵌套FormArray
ngrx/effects 感觉没什么用
对 ngrx/store 新的理解