Dart ViewChild为null,因为它不在dom(NGIF)中,是否有方法在找到它时编写要运行的函数?

Dart ViewChild为null,因为它不在dom(NGIF)中,是否有方法在找到它时编写要运行的函数?,dart,angular-dart,Dart,Angular Dart,我的设计: 我有一个选项卡,它利用NGIF,因此子内容不在dom中。问题是内部组件需要设置订阅。有没有一种方法可以让我的ViewChild在不为null时运行函数 @ViewChild("fooId") MyCustomClass foo; StreamSubscription sub = null; 对我来说,我想我需要做一些while循环,延迟定期检查foo,看看它是否为null setUp() async { while(sub == null){ if (foo != n

我的设计:

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

@ViewChild("fooId")
MyCustomClass foo;

StreamSubscription sub = null;
对我来说,我想我需要做一些while循环,延迟定期检查foo,看看它是否为null

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;
  ...
}

我不知道您可以将set与Viewchild结合使用。我来试试看。我认为属性foo本质上是HTML数据的getter,因此它在本质上是getterNo时会有设置问题,
@ViewChild()
只使用setter。如果需要从模板访问
foo
,还可以添加getter
foo
。我只是省略了getter部分,因为它通常是多余的。对不起,我想说的是,我认为使用ViewChild本质上就是一个getter,它只在您访问控制器时才尝试获取控制器。您可以将它与set函数耦合以基本上监视它的状态这一事实对我来说是新的,因为我认为它只是在访问期间确定的,并且我不认为我可以使用
set
来基本上监视它