Я хочу передать значение дочернему компоненту. это значение является наблюдаемым, поэтому я использую асинхронный канал.
<child [test]="test$ | async"></child>
test $ - это обычная наблюдаемая переменная, которая выдает значения через определенный период времени (3000 мс), имитируя запрос API к серверу.
this.test$=timer(3000).pipe(
mapTo("value")
)
в дочернем компоненте я просто хочу проверить значение test
@Input() test: any;
constructor(){
console.log("child/test", this.test); //null
setTimeout(()=>console.log("child/test (timeout)", this.test),4000) //value
if(this.test){
//maintain and check `this.test`
//this code will not run, because at this point `this.test` is null.
//we don't know the exact time that `this.test` will have a value
//this causes that `this.test` is wrong
this.checked=true
}
}
<div *ngIf="checked">{{test}}</div>
Я не хочу менять тип теста на Observable
и подписываться на него. Я хочу получить окончательное значение напрямую. и я вообще не хочу изменять компонент редактирования.
использование ChangeDetectorRef
для ручного запуска детектора изменений не
@Input() test$:Observable
constructor(){
this.test$.subscribe(v=>this.test=v)
}
Я также сделал этот stackblitz, чтобы проверить изменение значения среди всех крючков компонента.