I want to pass a value to the child component. this value is an Observable, so I use async pipe.
<child [test]="test$ | async"></child>
test$ is just a normal observable variable, that emits values after a period of time (3000 ms), simulating an API request to the server.
this.test$=timer(3000).pipe(
mapTo("value")
)
in child component, I just want to check test
value
@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>
I don't want to change the type of test to be Observable
and subscribe to it.
I want to receive the final value directly.
and I don't want to modify the edit component at all.
using ChangeDetectorRef
to manually trigger the change detector is not
@Input() test$:Observable
constructor(){
this.test$.subscribe(v=>this.test=v)
}
I also made this stackblitz to check the value changing among all the compoonent's hooks.
test
directly to the child component even it don't have a value yet. this makes the child component display a default template untiltest
get it's value without the need to implement a default template myself in my parent component. – Torre