Во-первых, спасибо, что поместили ваш код в стек. Это помогло мне понять проблему намного быстрее! Вот почему я проголосовал и отвечаю на ваш вопрос.
Проблема в том, что значение Subject не обновляется, когда я пытаюсь обновить значение непосредственно при передаче URL-адреса.
Это фактически обновлено . Чтобы доказать это, замените метод ngOnInit
BlogComponent
на следующий код:
const routerURL = this.router.url;
this.blogService.selectedNode.subscribe(console.log); // console.log is called here
this.blogService.selectedNode.next(routerURL);
Проблема возникает из-за того, что подписки не инициируются до того, как метод Subject
next
будет вызван . Компоненты, которые подписываются на Subject
, не создаются до вызова этого метода.
Если вы хотите передать значение в Subject
и у него есть будущее наблюдаемые получают это значение независимо от того, что подписано на Subject
во время передачи, посмотрите на ReplaySubject
Прежде чем взглянуть на ReplaySubject
с, хорошо понять разницу между горячими и холодными наблюдаемыми: субъекты являются «горячими» наблюдаемыми, что означает, что они запускаются независимо от того, что на них подписано. Напротив, «холодные» наблюдаемые они запускаются в зависимости от того, что на них подписано. См. здесь для получения дополнительной информации.