1 回答
TA贡献1802条经验 获得超4个赞
EventEmitter 不能有返回值。据我所知你可以做两件事。
@输入回调
可以将方法传递给您的子组件并在那里使用它。
例如。
父组件:
// HTML
<app-sub [parentHook]="hook.bind(this)"></app-sub>
// TS
hook(value) {
return value;
}
子组件
// HTML
<button (click)="getValueFromHook()">Click me!</button>
// TS
@Input() parentHook: () => number;
public getValueFromHook(): number {
const valueFromHook = this.parentHook.call(this, 20);
console.log(valueFromHook);
}
在您的情况下,您可以在此处返回一个 Observable。
@输入输出
您可以将数据作为 an 传递@Input并在发出事件时更改它。在您的子组件中,您可以处理ngOnChanges上的更改事件。
例如:
父组件:
// HTML
<app-sub
[data]="data"
(request)="handleRequest($event)">
</app-sub>
// TS
public data = 5;
public handleRequest(request) {
this.data = request + this.data;
}
子组件
// HTML
<button (click)="request.emit(20)">Click it!</button>
// TS
@Input() data: number;
@Output() request = new EventEmitter();
ngOnChanges(changes: SimpleChanges) {
console.log(this.data);
}
我希望这对您有用。
@Input & @Output 与 Observables
与前面的示例相同,但使用可观察对象,这样您就不必使用 onChanges 生命周期
例如:
父组件:
// HTML
<app-sub
[data$]="data"
(request)="handleRequest($event)">
</app-sub>
// TS
public data = new Subject();
public handleRequest(index) {
// here you can do your request to fetch some data and fill in
// the data$ observable with the result
this.fetchSomeDataBasedOnIndex(index).subscribe(result => {
this.data.next(result)
});
}
子组件
// HTML
<button (click)="request.emit(20)">Click it!</button>
// TS
@Input() data$: Subject;
@Output() request = new EventEmitter();
ngOnInit(): void {
this.data$.subscribe(d => console.log(d))
}
添加回答
举报