Проблема с BehaviorSubject, next () не работает - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь использовать службу angular для хранения и передачи данных через наблюдаемое.

Вот моя служба

public _currentLegal = new BehaviorSubject({
  name: 'init',
  _id: 'init',
  country: 'init',
  city: 'init',
});
readonly currentLegal$ = this._currentLegal.asObservable();

constructor(private http: HttpClient) {
}

setCurrentLegal(legal) {
  const legaltest = {
    name: 'test',
    _id: 'test',
    country: 'test',
    city: 'test',
  }
console.log('emitting next value from', legal.name)
this._currentLegal.next({ ...legaltest });
}

У меня есть компонент, который вызывает setCurrentLegal, console.log запущен и исправен. Затем я перехожу к другому компоненту, который подписывается на наблюдаемый currentLegal $, и значение остается тем же (init)!

Я попытался получить доступ к значению напрямую, установив тип publi c и используя getValue (), то же самое . Я пробовал продублировать объект, чтобы не передавать ссылку, ничего не изменил.

Вот мой компонент индексации ngOnInit:

ngOnInit(): void {
  this.legalToUpdate = this.legalService.currentLegal$.subscribe((legal) => {
    console.log(legal)
  })
}

Что здесь не так? Спасибо

1 Ответ

1 голос
/ 07 мая 2020

У вас такое поведение, потому что вы используете его в разных модулях, и оно создается в разных экземплярах.

Поместите вашу службу в root:

@Injectable({ providedIn: 'root' })
export class LegalService implements HttpInterceptor { }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...