Angular Access ng-template 的内部组件

2023-11-22

假设我们有一个名为TopComponent使用这样的模板:

<ng-template #top>
    <inner-selector #inner></inner-selector>
</ng-template>

它的代码很简单:

//... imports ...

@Component({
  // selector, styles etc
})
export class TopComponent implements AfterViewInit {

  @ViewChild('top') topComp : NgbModal;
  // NgbModal is a type provided by some 3rd-party library
  // I can't modify it
  
  ngAfterViewInit() {
    // let's access the #inner component from here
  }
}

我可以访问#top使用此代码的组件:

@ViewChild('top') topComponent: TopComponent;

我怎样才能访问#inner来自同一类的组件?

我尝试使用@ContentChild('inner')但仍然得到undefined.

PS.作为解决方法,我可以创建另一个组件,在<ng-template>并从中访问所有必要的子项。但这可以通过某种方式避免吗?


模板#top需要加载到某个容器中以存在于 DOM 中并由@ViewChild。 最简单的方法是使用简单的结构指令。 下面的例子NotReady是一个布尔值,在 ngInit 完成后设置为 false。

<div *ngIf="notReady else top"> 
    loading... 
</div>
<ng-template #top>
    <inner-selector #inner></inner-selector>
</ng-template>

请注意,@ViewChild('top') 需要映射为静态:假,因为它可能在 ngOnInit() 之后才可用/存在。 然后在每个更改检测周期搜索 #top,这在使用 *ngIf 等条件指令时很有用。

//... imports ...

@Component({
  // selector, styles etc
})
export class TopComponent implements AfterViewInit {

  notReady: boolean = true;

  @ViewChild("top", { static: false })  topComp : NgbModal;
  // NgbModal is a type provided by some 3rd-party library
  // I can't modify it
  
  ngInit(){
    this.notReady = false;
  }

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

Angular Access ng-template 的内部组件 的相关文章

随机推荐

  • 如何在 SVG 矩形中放置文本并使其居中

    我有以下矩形
  • git删除了所有内容,如何恢复文件和文件夹

    这是我第一次使用git 我想将现有的项目导入github 然后所有内容都被删除了 搜索答案后 我认为 git 在 git pull 后删除了文件 我正在尝试恢复文件和文件夹 但我找不到如何执行此操作 我做了下一个 jesus jesus K
  • 数值向量运算符重载+右值引用参数

    我有下面的数值向量模板类 用于数值计算的向量 我正在努力让它成为可能D A B C所有变量都是Vector对象 A B and C不应修改 我的想法是使用Vector operator Vector B 这样在 希望 Rvalue 之后Ve
  • java.lang.ClassCastException:android.view.ViewGroup$LayoutParams 无法转换为 android.widget.Gallery$LayoutParams

    我正在尝试添加Fancycoverflow在我的应用程序中 它可以很好地处理静态图像 如这个例子 但我在适配器中做了一些更改 我尝试运行我的应用程序 它崩溃并显示以下错误 FATAL EXCEPTION main java lang Cla
  • 如何使用前缀/后缀重命名?

    我该怎么做mv original filename new original filename无需重新输入原始文件名 我想象能够做类似的事情mv p new original filename也许mv original filename n
  • Java 关键字作为变量

    在VB NET中 我们可以用括号将变量名括起来 并使用关键字作为变量名 如下所示 Dim new As String C 等效项 string new 我想知道 Java 是否有相当于这样做的东西 不可以 您可以添加下划线或类似的废话 但基
  • 没有catalina.out

    我不知道如何设置以及设置什么 以便在我的计算机上的 Tomcat 上安装 catalina out 我在 Windows XP 上使用 Tomcat 6 0 28 压缩版本 要启动服务器 我只需运行startup bat file 难道我做
  • 我可以在gdb下打印gdtr和gdt描述符吗?

    I want to use gdb to see my GDTR LDTR TTR and segment register 不可见部分 x86 所以在 gdb 中我输入 p x gdtr 等 但结果是 6 值无法转换为整数 在 gdb 中
  • C 和 C++ 编码标准

    关于 C 和 C 编码标准的最佳实践是什么 是否应该允许开发人员随意将它们混合在一起 链接 C 和 C 目标文件时是否存在任何复杂情况 像传统上用 C 编写的套接字库之类的东西是否应该保留在 C 中并保存在单独的源文件中 即将 c 代码保存
  • Django CSRF 检查因 Ajax POST 请求而失败

    我可以通过我的 AJAX 帖子获得一些遵守 Django 的 CSRF 保护机制的帮助 我已按照此处的说明进行操作 http docs djangoproject com en dev ref contrib csrf 我已经准确地复制了该
  • ARKit 1.5 如何获取垂直平面的旋转

    我正在尝试垂直平面 并尝试将节点放置在墙上 并根据该垂直平面进行正确的旋转 这是被点击的垂直平面的 ARHitTestResult let hitLocation sceneView hitTest touchPoint types exi
  • 在没有互联网连接的计算机上使用 Scala

    我是 Scala 新手 如果问题绝对显而易见 我很抱歉 我的计算机上安装了 Eclipse Photon 想要编辑 Scala 代码并生成可运行的 jar 棘手的部分是我的计算机 Centos7 无法访问互联网 我记住两个潜在的问题 手动下
  • 如何在具有角度嵌套数据组的材料表中显示拆分标题

    当数据作为对象的嵌套数组出现时 我在材料表中显示数据时遇到问题 我想显示当前显示在 stackblitz 中的表格 如果我用我的更改现有数据newData变量它将开始破坏整个表 谁能指导我如何通过材料表中的一组嵌套数据实现拆分标题功能 我想
  • iPad 上具有自定义尺寸的 SwiftUI Sheet() 模式

    如何使用 SwiftUI 控制 iPad 上模态表的首选演示大小 我很惊讶在谷歌上找到这个问题的答案是多么困难 另外 了解模式是否通过向下拖动 取消 或实际执行自定义积极操作来关闭的最佳方法是什么 以下是我在 iPad 上使用 SwiftU
  • 找出两个缺失的数字

    我们有一台内存为 O 1 的机器 我们想要通过n第一遍中的数字 一个接一个 然后我们排除这两个数字 我们将通过n 2号码到机器 编写一个算法来查找缺失的数字 可以使用 O 1 内存来完成 您只需要几个整数来跟踪一些运行总和 整数不需要 lo
  • Autofac 和 ASP .Net MVC 4 Web API

    我在用Autofac用于我的 ASP Net MVC 4 项目中的 IoC Autofac 在初始化存储库并将其传递到API控制器 我确信我的配置中缺少某些内容 这是我导航到时遇到的错误 https localhost 44305 api
  • 在 Android 上强制执行 Expo 上的 LTR

    我正在使用 React Native 和 Expo 创建一个应用程序 但找不到强制 LTR 从左到右 方向的解决方案 我的一些用户的手机支持 RTL 语言 但我只有英语和挪威语 因此以英语显示 RTL 文本没有意义 我也使用 i18next
  • DbContext配置?

    数据库上下文 public class HaberPortalDB DbContext public DbSet
  • 有没有办法在 Visual Studio 2010 中突出显示当前活动的代码块?

    在 Visual Studio 2010 中 如果将鼠标悬停在小 减号上 它将突出显示该代码块 我的问题是 有没有办法让您在其中编码时始终突出显示该块 这样 当我在方法和类之间跳转时 我当前正在处理的任何块都会突出显示 以帮助我的眼睛快速聚
  • Angular Access ng-template 的内部组件

    假设我们有一个名为TopComponent使用这样的模板