Я хочу передать значение дочернему компоненту. это значение является Observable, поэтому я использую asyn c pipe.
<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>
Я не хочу менять тип теста на be Observable
и подписывайтесь на него. Я хочу получить окончательное значение напрямую. и я вообще не хочу изменять компонент редактирования.
использование ChangeDetectorRef
для ручного запуска детектора изменений не
@Input() test$:Observable
constructor(){
this.test$.subscribe(v=>this.test=v)
}
Я также сделал это stackblitz , чтобы проверить изменение значения среди всех крючков компонента.