Javascript 使用RxJS等待组件不为null
我在html模板上使用的组件具有相当复杂的*ngIf条件Javascript 使用RxJS等待组件不为null,javascript,angular,rxjs,Javascript,Angular,Rxjs,我在html模板上使用的组件具有相当复杂的*ngIf条件 <my-component #myComponent *ngIf="..."></my-component> 在“点击”按钮后,我发送请求,显示/隐藏一些东西。。。在ma页面上-之后,我的组件中的*ngIf应该设置为true。当this.myComponent不为null时,我可以调用其中的initdata函数。当这个组件不为null时,我尝试使用rxjs进行等待。setTimeout方法有时
<my-component #myComponent *ngIf="..."></my-component>
在“点击”按钮后,我发送请求,显示/隐藏一些东西。。。在ma页面上-之后,我的组件中的*ngIf应该设置为true。当this.myComponent不为null时,我可以调用其中的initdata函数。当这个组件不为null时,我尝试使用rxjs进行等待。setTimeout方法有时会失败,如下所示
让检查=真;
让data=wait this.loadData;
interval100.pipetakeWhile=>checking.subscribe{
ifthis.myComponent{
this.myComponent.initdata
检查=假;
}
}
// ... 使this.myComponent不为空的东西
但是这段代码并不好——它每100ms检查一次变量值,代码也相当长和复杂。是否有更智能的解决方案,例如,只有当this.myComponent将值从null更改而不每隔100ms ping一次时,才会触发代码
使现代化
我忘了提到以上间隔。。。代码在某个异步回调中,因此实际上我需要等待数据准备就绪且myComponent不为空时我也会更新上面的代码您应该将调用this.myComponent.initdata移动到myComponent中的ngOnInit中。使用@Input变量用数据初始化组件
<my-component #myComponent *ngIf="..." [data]="data"></my-component>
ngOnInit保证每个组件生命周期调用一次。每次切换布尔表达式时,ngIf都会销毁/创建组件。您应该将调用this.myComponent.initdata移动到myComponent中的ngOnInit中。使用@Input变量用数据初始化组件
<my-component #myComponent *ngIf="..." [data]="data"></my-component>
ngOnInit保证每个组件生命周期调用一次。每次切换布尔表达式时,ngIf都会销毁/创建该组件。您可以在子组件上使用EventEmitter并侦听该组件: 在您在ngOnInit函数中发送的子组件上,或在您准备就绪时:
@Output() loaded = new EventEmitter<void>();
在父组件HTML中:
<my-component #myComponent *ngIf="..." (loaded)="myComponent.init(data)"></my-component>
您可以在子组件上使用EventEmitter并侦听: 在您在ngOnInit函数中发送的子组件上,或在您准备就绪时:
@Output() loaded = new EventEmitter<void>();
在父组件HTML中:
<my-component #myComponent *ngIf="..." (loaded)="myComponent.init(data)"></my-component>
@胡安:不,这是不同的,我认为你是在为ViewChild寻找塞特。您无需使用interval来监视零部件引用是否已定义。你应该参考-@Juan no-这是不同的,我想你是在寻找ViewChild的setter。您无需使用interval来监视零部件引用是否已定义。您应该参考-这是一个非常聪明的方法:-但是数据在嵌套的异步代码中-所以实际上我也必须等待它我更新问题-但是我给出+1-谢谢这是一个非常聪明的方法:-但是数据在嵌套的异步代码中-所以实际上我也必须等待它我更新问题-但是我给出+1-谢谢,这是一种非常聪明的方法——不过在我的组件上,我使用ngOnInit{loaded.emit}——在父html load=initMyComponent和in.ts initMyComponent{this.myComponent.initthis.data}——但是数据在嵌套的异步代码中——所以实际上我也必须等待它。但是我给出+1-谢谢你这是一个非常聪明的方法-但是在我的组件上我做了ngOnInit{loaded.emit}-在父html load=initMyComponent和in.ts initMyComponent{this.myComponent.initthis.data}-但是数据在嵌套的异步代码中-所以实际上我也必须等待它。但是我给+1-谢谢