Во-первых, когда вы объявляете DataService
в поставщиках компонентов, он создает новый экземпляр.Это означает, что FirstComponent.dataService
относится к объекту, отличному от SecondComponent.dataService
.Удалите свойство «provider» из ваших декораторов компонентов и добавьте «provideIn» в ваш декоратор DataService, чтобы сделать его одноэлементным, чтобы все ссылки ссылались на один и тот же экземпляр (если вы не поместили его в «поставщики» класса):
@Injectable({
providedIn: 'root'
})
export class DataService {
Вы выходите за пределы подписки.Когда вы вызываете это:
this.dataService.changeMessage(this.card.img)
Во втором компоненте у вас есть это в OnInit:
this.dataService.currentMessage.subscribe(channel => this.channel = channel)
console.log(this.channel)
Таким образом, вы подписываетесь и ничего не делаете, кроме как установить канал, когда он изменяется, новаш лог происходит сразу, поэтому this.channel
пока не будет установлен.Я не знаю, что вызывает openDetails()
, но попробуйте это во втором компоненте:
this.dataService.currentMessage.subscribe(channel => {
this.channel = channel;
console.log('updated channel:', channel);
});