在 ngAfterViewInit 中调用时 ViewContainerRef 未定义

2024-01-02

我想在父组件初始化时动态创建子组件,但是当我尝试在 ngAfterViewInit() 中创建它时,它会抛出 ViewContainerRef 未定义的错误。

组件.ts

  @ViewChild('container', {read: ViewContainerRef}) container: ViewContainerRef;

  constructor(private resolver: ComponentFactoryResolver) {
  }

  ngAfterViewInit(){
    const factory = this.resolver.resolveComponentFactory(ChildComponent);
    this.container.createComponent(factory); //container is undefined here

  }

组件.html

...
<div class="row" #container ></div>
...

自从div是在一个ngIf条件块,它可能不可用ngAfterViewInit。您可以通过监视元素的存在来保护代码免受这种可能性的影响ViewChildrenQueryList.changes event:

@ViewChildren('container', { read: ViewContainerRef }) containers: QueryList<ViewContainerRef>;

ngAfterViewInit() {
  if (this.containers.length > 0) {
    // The container already exists
    this.addComponent();
  };

  this.containers.changes.subscribe(() => {
    // The container has been added to the DOM
    this.addComponent();
  });
}

private addComponent() {
  const container = this.containers.first;
  const factory = this.resolver.resolveComponentFactory(ChildComponent);
  container.createComponent(factory);
}

See 这次堆栈闪电战 https://stackblitz.com/edit/angular-n61rj6进行演示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ngAfterViewInit 中调用时 ViewContainerRef 未定义 的相关文章

随机推荐

  • 在 IntelliJ Idea 14 上使用 Activator 问题

    我在 IntelliJ IDEA 14 上遇到以下问题 我使用 Activator v1 2 10 创建了一个 Play Scala 项目 然后 我使用它将其转换为IDEA项目activator idea命令 当我打开项目时IDEA 14
  • 有什么方法可以更改 java 类中的 android:windowSoftInputMode 值吗?

    我想让我的标签有不同的windowSoftInputMode每个选项卡的属性 当选项卡的所有处理都是通过一个活动完成时 如何从 java 类访问此属性 有没有办法从java代码访问这个清单属性 使用以下命令更改活动的 softInputMo
  • 在一个程序中编译多个C文件

    我有以下两个文件 file1 c int main foo return 0 file2 c void foo 我可以将这两个文件编译并链接在一起吗 file1 c会认出foo功能无需添加extern 更新了原型 gcc file1 c f
  • 构造函数参数之后的此语句[重复]

    这个问题在这里已经有答案了 当我尝试使用 APN 构建某些东西时 我看到了这个代码块 有人可以解释一下 this 语句在那里做什么吗 public ApplePushService IPushChannelFactory pushChann
  • 如何将文本视图连接到网站?

    你好 我是 Android 新手 我创建了一个应用程序 它使用 google place api 并列出了一些百货商店 我已将列表设置为可单击 单击百货商店的名称后 我将开始一项新活动 该活动访问我创建的数据库 以在该特定商店中提供推荐或折
  • 无论如何,有没有一个 jquery UI 日期选择器只允许星期六?

    我正在使用 jquery ui 日期选择器 我想添加一些验证 这样它只允许人们选择星期六而不是任何日期 我可以事后验证 但认为让日期选择器仅启用周六日期来进行预先验证会更灵活 test datepicker beforeShowDay fu
  • 如何将依赖项注入 Laravel 作业

    我正在从我的控制器将一个 laravel 作业添加到我的队列中 this gt dispatchFromArray ExportCustomersSearchJob userId gt id clientId gt clientId 我想注
  • git pull *之后* git rebase?

    我有一个功能分支和一个主分支 主分支已经发展 我的意思是让这些更新尽可能少地偏离主分支 So I git pull在两个分支中 git checkout feature branch最后git rebase master 现在我要么期望一切
  • 如何在没有 javascript 的情况下使 svg 路径适合某些 px 大小

    div style width 40px height 40px background 333333 margin 10px div
  • ASP.NET 站点 - 在特定时间触发一些代码

    我正计划构建一个 ASP NET 网站 该网站将位于共享主机上 我没有为此提供 Windows 服务的选项 对于可以执行任务 例如凌晨 3 点 的网站 我有哪些具体选项 也许启动一个单独的线程 或者什么 Thanks 我正要做类似的事情 需
  • 如何在R中结合使用pairs函数和布局?

    我正在尝试向自定义对图添加一个简单的图例 这是可重现的代码 没有我的自定义配对功能 layout cbind 1 2 width c 1 1 layout show 2 pairs USJudgeRatings 为什么pairs函数会 删除
  • 如何在 Actionmailer 消息中使用不同的布局?

    我有带有布局的project mailer 但如果project notification方法具有以下参数 我想使用不同的方法unsubscribe link true layout project mail def project not
  • Python中递归查找int列表列表中第k大的int

    作为编程新手 我正在尝试执行一个函数来查找整数列表中的第 k 个最大整数 我之前尝试过整数列表并且它有效 然而 对于这个函数来说 它的基本情况有太多的可能性 Ex 1 2 1 1 2 1 1 我陷入了基本情况 谁能给我一个提示吗 该函数的运
  • N层架构有什么好处?

    N层架构有什么好处 这如何使应用程序变得更好 From here http wiki answers com Q Explain the benefits of layered architecture 其他应用程序将能够重用您的层公开的功
  • 生成递增日期字符串

    我需要生成一串递增日期 如下所示 year month day hour minute 2010 2 12 11 30 2010 2 12 11 31 etc 这样做的最好方法是什么 我可能想生成最多 1000 行 如下所示 您可以使用日期
  • Json自定义反序列化器陷入无限递归

    实现了一个自定义反序列化器 通过以下方式反序列化 JSON 但 mapper treeToValue 导致无限次调用代码 public class MyDeserializer extends StdDeserializer
  • 如何用python在PDF文件中写入表结构数据?

    id name 47 Some textjogjwojgopwgpowmok 47 Some textjogjwojgopwgpowmokg 47 Some textjogjwojgopwgpowmokg 47 Some textjogjw
  • 正则表达式检查字符串仅包含字母和数字但不仅仅包含数字

    我需要正则表达式的帮助 它检查字符串仅包含字母和数字 但不仅包含数字 Valid letters 1wret 0123chars chars0123 cha2rs Invalid 1324 xcvxxc xcv123xxc 012chars
  • NullReferenceException WIA C#

    当我运行下面的代码时 我收到此错误 NullreferenceException 未处理 下面是我的代码 private void showScannerDialog this scanner null this imageItem nul
  • 在 ngAfterViewInit 中调用时 ViewContainerRef 未定义

    我想在父组件初始化时动态创建子组件 但是当我尝试在 ngAfterViewInit 中创建它时 它会抛出 ViewContainerRef 未定义的错误 组件 ts ViewChild container read ViewContaine