【发布时间】:2020-05-15 19:08:59
【问题描述】:
我有两个同级组件,我想在它们之间共享数据。为了用户的方便,如果组件一上的 UI 发生了变化,那么我想发出通知组件二。那么组件二的 UI 应该会被传入的参数改变。
反之亦然,如果组件二的 UI 发生变化,我也想通知组件一。所以我使用 Behavior subject 来共享数据。
但是它会导致循环调用。
Stackblize BehaviorSubject demo
BehaviorSubject 在服务类中。
import { Injectable} from '@angular/core';
import {BehaviorSubject, Observable} from 'rxjs';
@Injectable()
export class UsersService{
constructor(){}
private user = new BehaviorSubject<number>(0);
public getUser = (): Observable<number> => {
return this.user.asObservable();
}
public editUser = (newUser: number) => {
this.user.next(newUser);
}
}
所以我们有 get 和 set 部分。在兄弟组件中,我们调用了ngOninit中的get user part。
ngOnInit(){
this.userService.getUser().subscribe(u => {
if(u > 0) {
this.patchData(u);
this.newUser = u + 1;
console.log(u);
}
});
}
一旦我们得到用户编号,我们就会发出,以便其他组件可以接收它并在之后呈现 UI。
错误显示在控制台中。
【问题讨论】: