行为主体被解雇两次

时间:2019-05-15 08:53:51

标签: rxjs angular7

我正在使用rxjs中的Behavior主题: 在服务中:

private rights = new BehaviorSubject<Array<string>>([]);


updateRights(rights: Array<string>) {
        this.rights.next(rights);
    }

    getRights(): Observable<any> {
        return this.rights.asObservable();
    }

我正在更新根组件中的权限,并在另一个组件中订阅该权限,例如:

 this.configService.getRights().subscribe(res => {
      console.log(res);
    })

此订阅将触发两次。一旦数据为空,然后在接收到数据时再次触发。我希望订阅仅触发一次并仅获取最新数据。应该怎么办?

2 个答案:

答案 0 :(得分:2)

BehaviourSubject默认情况下会在订阅时发出该值,这是预期的设计。如果您不希望这种行为,请改用Subject

答案 1 :(得分:0)

这样做:

private currnetRightsSubject: BehaviorSubject<string[]>;
public currentRights: Observable<string[]>;

constructor() {
    this.currnetRightsSubject= new BehaviorSubject<string[]>(/*.......*/);
    this.currentRights= this.currnetRightsSubject.asObservable();
}

public get currentRightsValue(){
    return this.currnetRightsSubject.value;
}

已更新

像这样填充BehaviorSubject

this.currnetRightsSubject.next(someValue);