Поведение предмета стрельбы дважды - PullRequest
1 голос
/ 15 мая 2019

Я использую тему поведения от rxjs: В сервисе:

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 ]

2 голосов
/ 15 мая 2019

BehaviourSubject выдает значение по умолчанию для подписки, и оно предназначено для разработки. Если вам не нужно это поведение, используйте Subject .

0 голосов
/ 15 мая 2019

Сделайте так:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...