在 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 未定义 的相关文章

  • Angular 2:将路由器出口设计为宽度 < 100%

    我正在构建一个 Angular 2 应用程序 该应用程序将为宽度超过 500 的屏幕提供侧导航栏 为宽度小于 500 的屏幕提供底部导航栏 现在 我尝试为侧栏分配 20 的宽度 即 80 应用内容 我遇到的问题是路由器出口内容 即实际的应用
  • 如何为 Angular Material 分页器添加“全部”选项?

    我想要一个显示表中所有行的选项 Angular Material 仅支持页面大小选项的数字 我需要这样的东西 pageSizeOptions 5 10 25 50 100 All 你可以试试这个 dataSource dataSource
  • 无法从角度路由器获取路径或 url

    我无法从 ActivatedRoute 或 Router 导入中获取 URL 或路径 它为路径 输出空白 为 URL 输出 我记得使用的是工作版本 唯一捕获正确路由的是Router events 我也无法订阅ActivatedRoute 中
  • 在 Angular 6 中将多个值传递给管道

    我需要使用管道在 Angular 6 中创建一个搜索表单 并且必须将多个参数传递给管道 nameSearch emailSearch roleSeach accountSearch tr tr 这是我的烟斗 Pipe name search
  • 自定义 django-rest-framework-simplejwt 的 JWT 响应

    我正在设置 Django 来发送 JWT 响应而不是视图 我尝试使用 django rest framework simplejwt 这个框架中提供了一个函数TokenObtainPairView as view 返回一对 jwt 我需要使
  • 如何使 Angular Reactive Formarray 中的级联下拉菜单工作而不弄乱下拉值

    我有一个角度 4 的表单 其中包含名字 姓氏和一个包含 2 个下拉菜单 选择 的表单数组 用作级联下拉菜单和一个删除按钮 表单的其余部分还包含一个发送按钮和一个添加选项按钮 我在此处添加了屏幕截图 以便您更好地理解 表单添加 删除按钮和发送
  • @Component 和 @View 的区别

    我试图找出 AngularJS 2 中 Component 和 View 之间的区别 在下面的两个例子中我可以实现完全相同的事情 没有 View的示例 import Component from angular2 core Componen
  • Angular Http 客户端 - 如何将嵌套参数对象传递给 GET API

    我正在使用最新版本的角度 8 我正在将我的 Http 请求从原始 http 转换为新的 http 客户端 我正在调用 GET API 其中我通过以下方式发送嵌套参数 let data any filters 4e9bc554 db54 44
  • Angular2:setTimeout仅调用一次

    我正在 Angular2 中实现需要使用的功能setTimeout My code public ngAfterViewInit void this authenticate loop private authenticate loop s
  • Angular2 中 Http 的 Promise 与 Observable? [复制]

    这个问题在这里已经有答案了 本质上 正如标题所说 是否有任何理由使用可观察的承诺 https stackoverflow com questions 37364973 angular 2 promise vs observable为了进行
  • 您必须位于 angular-cli 项目中才能使用serve命令

    我正在尝试运行拖放示例dragula https github com valor software ng2 dragula 但是当我跑步时ng serve它抱怨 You have to be inside an angular cli p
  • 拖动元素时是否禁用 mousemove 事件?

    我试图通过在拖动元素时观察文档上的 mousemove 事件来移动元素 使用 html5 拖放 我在文档的父元素上添加了一个 mousemove 侦听器 每当我移动鼠标时都会触发该监听器 但是一旦我开始拖动另一个子元素 我就不再看到 mou
  • 如何在Angular2中正确使用依赖注入(DI)?

    我一直在试图弄清楚 DI 依赖注入在 Angular2 中是如何工作的 每次当我尝试将服务 或类注入我的组件时 我都会遇到很多问题 从不同的谷歌搜索文章中 我需要使用providers 在组件配置中 或者有时我需要使用 Inject 在我的
  • 使用 Observable 与 Immutable 进行变更检测

    所以我读了本文 http victorsavkin com post 110170125256 change detection in angular 2关于 Angular 2 变更检测 但读完之后我变得更加困惑 所以我开始阅读一些导致更
  • 导航嵌套组件时创建面包屑 (Angular 2)

    我正在为此苦苦挣扎 这个想法是有一个组件 当浏览子视图时更新面包屑 例如
  • Angular 2 runOutsideAngular 仍然改变 UI

    从我的理解来看runOutsideAngular https angular io docs ts latest api core index NgZone class html runOutsideAngular anchor 如果我需要
  • 如何将 Laravel 5.4 与 Angular 4 集成

    我知道如何创造完整的拉拉维尔 5 4自己的项目 我也知道如何使用创建 SPA角4 Problem 我不知道如何将 Laravel 与 Angular 集成 另外 我想使用 Laravel 5 4 作为后端 使用 Angular 4 作为前端
  • angular2 MdDialog 未显示为弹出窗口

    所以我尝试使用 MdDialog 来显示错误消息 不幸的是 它不是显示为弹出窗口 而是显示为页面底部的块 我需要查看或更改哪些内容才能使其正常工作 下面的代码 common modal component html h2 title h2
  • 在指令中动态添加 *ngIf

    如何动态地将 ngIf 添加到用属性指令修饰的元素 为了一个简单的实验 我尝试了这个 Directive selector lhUserHasRights export class UserHasRightsDirective implem
  • 模板解析:找不到管道

    我收到错误 模板解析错误 找不到管道 amDateFormat 这是我的app module ts import NgModule from angular core import MomentModule from angular2 mo

随机推荐

  • 在 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