Rxjs для хранения текущего члена - PullRequest
0 голосов
/ 02 июля 2019

Я унаследовал кодовую базу, которая использует объект Behavioursubject для хранения текущего члена. При извлечении текущего выбранного члена возвращается закрытая переменная this._member.

Я бы изменил код, чтобы вы подписались на currentMember в компоненте.

Мне интересно, есть ли причина, по которой этот подход используется, в отличие от предложенного мной решения?

export class MemberService {
  ...
  private _member: Member;
  private _memberSource = new BehaviourSubject<Member>(this._member);
  // public currentMember = this._memberSource.asObservable(); // My solution

  setSelectedMember(currMem: Member): void {
    this._member = currMem;
    this._memberSource.next(this._member);
  }

  getSelectedMember(): Member {
    return this._member;
  }
  ...
}

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Наличие this._member в качестве свойства сложения является неверным кодом. Это совершенно не нужно, потому что объект BehaviourSubject уже содержит значение. Функция getSelectedMember также может возвращать this._memberSource.getValue()

По моему мнению, лучшее решение - это просто сделать объект поведения публичным. у него уже есть функция set, get и subscribe. нет причин заворачивать их в добытчики и установщики. Сделайте это только для чтения, чтобы не менять саму тему

export class MemberService {
...
   public readonly member = new BehaviourSubject<Member>(null);
...
}

Теперь вы можете:

memberService.member.subscribe(...); // subscribe
const currentMember = memberService.member.getValue(); // get the value
memberService.member.next(new Member()); // set the value

его проще поддерживать и намного меньше кода

0 голосов
/ 02 июля 2019

Нет, ваше решение на самом деле идиоматично для Angular.Получение вещей из сервиса обязательно (с помощью геттера) имеет свои применения, но в Angular большую часть времени мы можем обойтись без этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...