首页 > 解决方案 > ViewChild 为 null 因为它不在 dom (NGIF) 中,有没有办法编写一个函数在找到时运行?

问题描述

我的设计:

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

@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());
  // });
}

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

标签: dartangular-dart

解决方案


foo一个二传手:

MyCustomClass _foo;

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

推荐阅读