У меня есть то, что я считаю очень простой настройкой.Компонент A отображает компонент B.
Компонент A предоставляет Subject
и в своем шаблоне передает тему (используя асинхронный канал) одному из свойств компонента B:
@Component({
template: "
<div><app-comp-b [input]='s | async'></app-comp-b></div>
"
})
class CompA {
s: BehaviorSubject<string> = new BehaviorSubject<string>('');
change(newS: string) { this.s.next(newS); }
}
class CompB {
@Input() input: string;
}
По какой-то причине, B получает только начальное значение s
.Последующие вызовы change
(которые создают новое значение в s
) не влияют на B. То есть значение input
не изменяется (например, если я отображаю его в шаблоне B.)
Если я подпишусь вручную на s
, например, s.subscribe(ss => console.log(ss));
, я смогу увидеть значения по мере их появления, напечатанные в консоли.
Более того, если я использую pipe
и tap
для печати значений ничего не происходит, пока я не подпишусь вручную.Это намекает мне на то, что Comp B не подписывается на s
.
Что я делаю не так?(Я использую угловой 4.4.7)