ViewChild为null,因为它不在dom(NGIF)中,有没有办法在找到时写一个函数给运行?

ViewChild is null because it is not in dom (NGIF), is there a way to write a function to run when it is found?

我的设计:

我有一个利用 NGIF 的选项卡,因此子内容不在 dom 中。问题是内部组件需要订阅设置。有没有办法让我的 ViewChild 在不为 null 时可以 运行 一个函数?

@ViewChild("fooId")
MyCustomClass foo;

StreamSubscription sub = null;

对我来说,我在想我需要做某种 while 循环,延迟以定期检查 foo 看它是否不为空。

setUp() async {
  while(sub == null){
    if (foo != null){
       sub = foo.onChanged.listen((_)=>_func());
    }
    await new Future.delayed(new Duration(seconds: 1));
  }
}

但看起来有点脏。

有没有办法在您的 init 文件中进行设置以执行类似于以下操作的操作:

ngOnInit(){
  // foo.when( () => foo !=null, (){ 
  //   sub = foo.onChanged.listen((_)=>_func());
  // });
}

显然这是在伪代码中,但我认为可能有比某些轮询代码更好的选择,以便继续检查无效性。

使foo成为setter:

MyCustomClass _foo;

@ViewChild("fooId")
set foo(MyCustomClass value) {
  _foo = value;
  ...
}