1 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊
EventEmitter 不能有返回值。據(jù)我所知你可以做兩件事。
@輸入回調(diào)
可以將方法傳遞給您的子組件并在那里使用它。
例如。
父組件:
// 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);
}
在您的情況下,您可以在此處返回一個(gè) Observable。
@輸入輸出
您可以將數(shù)據(jù)作為 an 傳遞@Input并在發(fā)出事件時(shí)更改它。在您的子組件中,您可以處理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);
}
我希望這對(duì)您有用。
@Input & @Output 與 Observables
與前面的示例相同,但使用可觀察對(duì)象,這樣您就不必使用 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))
}
添加回答
舉報(bào)