当前位置: 首页 > 知识库问答 >
问题:

使用 ngIf 时找不到 div

薛浩言
2023-03-14

如果我尝试选择存在于ngIF指令中的DOM元素,则该元素为空。如果我删除ngIF,那么我可以选择它。

ngAfterViewInit() {
  const outer = document.getElementById('external-events');
  console.log(outer);
}

组件模板中的代码,未找到div:

<div *ngIf="groupedPatchGroups">
  <div id="external-events">
      stuff here
  </div>
  <br />
</div>

去掉*ngIf和外部报告div的内容。

ngAfterViewInit是否在数据返回之前运行以确定ngIF发生了什么?我希望ngIF首先运行,而ngAfterViewInit是最后运行的东西。

注意:groupedPatchGroups 值在 ngOnInit 中设置。

共有3个答案

卢树
2023-03-14

试试这个,

constructor(private cdref: ChangeDetectorRef)

ngAfterViewInit() {
  this.cdref.detectChanges();
  const outer = document.getElementById('external-events');
  console.log(outer);
}
杜辉
2023-03-14

DOM 元素仅在 ngIf 中的表达式为真时使用 ngIf 创建,如果 ngIf 中的表达式为假 DOM 元素将不会创建。在您的情况下,如果分组补丁组= true,那么只有你会得到 div 在 ngIf div 中。

戈博易
2023-03-14

访问新创建的元素的一种方法是在 div 上设置模板引用变量

<div *ngIf="groupedPatchGroups">
  <div #externalEvents>
      stuff here
  </div>
  <br />
</div>

并订阅ngAfterViewInit中的QueryList.changes事件。您还可以在订阅前检查元素是否已经存在于DOM中。

@ViewChildren("externalEvents") externalEvents: QueryList<ElementRef>;

ngAfterViewInit() {
  console.log("Before changes", this.externalEvents.first); // Maybe already present
  this.externalEvents.changes.subscribe((elements) => {
    // Do something with elements or with this.externalEvents
    let element = this.externalEvents.first;
    console.log("Changes detected", element);
    ...
  }
}

请参阅此堆栈闪电战以获取演示。

 类似资料:
  • 问题内容: 我的主文件夹中有一个脚本。 当我导航到该文件夹​​并输入时,我得到 。 当我使用时,我得到 。 为什么会发生这种情况,我该如何解决? 问题答案: 没有权限 为了运行脚本,文件必须 设置可执行权限 。 为了完全理解Linux 文件权限,您可以学习命令的文档。chmod是 change mode 的缩写,是用于更改文件的权限设置的命令。 要阅读本地系统的chmod文档,请运行或从命令行运行

  • 问题内容: 我已经在Raspberry Pi上的Occidentalis操作系统(Raspbian的变体)上安装了OpenCV,使用的是在此处找到的jayrambhia的脚本。它安装了版本2.4.5。 当我尝试import cv2使用Python程序时,收到以下消息: 该文件cv2.so存储在 在中也有文件夹,这可能是个问题,但我不确定。 这可能是路径错误吗?感谢你的任何帮助,我是Linux的新手

  • 中还有名为Python3.2和Python2.6的文件夹,这可能是一个问题,但我不确定。 这可能是路径错误吗?感谢任何帮助,我是Linux的新手。

  • 所以,我最近创建了我的第一个插件,叫做BetterTeaming。该插件正在使用插口api。插件发布后,一段时间后,有人建议我使用Maven从编译的jar中删除插口api依赖项。这应该缩小文件大小。然而,我对Maven了解不多。我成功地设置了它,并将文件复制到Maven文件夹(包括层次结构截图),但每次我在本地服务器Minecraft上加载插件时,它都会向我抛出ClassNotFoundExcep

  • 我试图用JavaWebStart来代替Javaapplet,但每次我运行。jnlp文件要么直接从web服务器,要么直接从我的计算机。它给了我一个错误。 我看到JavaWeb启动启动屏幕,然后出现默认进度条。它下载,然后验证我的罐子,但不久之后,以下错误消息出现“无法启动应用程序”。 我在Temp文件夹中没有看到任何看起来像tmp_cache的文件。 这是我的JNLP文件: 我尝试过的事情: 从我的

  • 在本例中,我使用Angular并希望使用(从版本4开始可用): 如何使用实现相同的行为?