本文介绍了Angular 5 - 如何在使用 *ngFor 创建 HTML 元素时调用函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目前我在一个视图中工作,我必须动态创建 HTML 元素.

我正在使用 *ngFor 指令创建 HTML 元素,并以数组为界.

在将新对象推入数组后,我需要使用 JQuery 选择器引用新的 HTML 元素,但 HTML 元素尚未呈现.

如何在 HTML 元素准备好后立即触发函数?

提前致谢.

解决方案

正如评论中所指出的,如果您有选择,您可能不想在 Angular DOM 元素上使用 JQuery.它会导致无休止的混乱.

但是,您可以使用 elementRef.nativeElement 访问组件的 DOM 子级.在*ngFor(或其他结构指令)的情况下,您想要运行它的生命周期钩子是AfterViewChecked.此时,您就知道该组件已完成绑定并呈现其内容.

结合起来,这是一个简单的小例子,只是为组件的所有动态生成的 div 着色:

import {AfterViewChecked, Component, ElementRef} from '@angular/core';@成分({选择器:'app-root',模板:`<div *ngFor="让条目进入">{{入口}}

`})导出类 AppComponent 实现 AfterViewChecked {构造函数(私有元素引用:元素引用){}条目 = ['a', 'b', 'c'];ngAfterViewChecked(): 无效 {const divs = this.elementRef.nativeElement.querySelectorAll('div');divs.forEach(div => div.style.background = '红色');}}

Currently I'm working in a view where I have to dynamically create HTML elements.

I'm creating the HTML elements with *ngFor directive bounded with an Array.

I need to refer the new HTML element with JQuery selector after push a new object into the Array, but the HTML element is not rendered yet.

How can I trigger a function just after the HTML element is ready ?

Thanks in advance.

解决方案

As pointed out in the comments, you probably don't want to use JQuery on Angular DOM elements if you have a choice. It will lead to endless confusion.

You can, however, access a component's DOM children using elementRef.nativeElement. The lifecycle hook where you want to run that in the case of *ngFor (or other structural directives) is AfterViewChecked. At that point, you know that the component has finished binding and rendering its content.

Combined, here's a cheap little example just coloring all dynamically generated divs of a component:

import {AfterViewChecked, Component, ElementRef} from '@angular/core';

@Component({
  selector: 'app-root',
  template: `
    <div *ngFor="let entry of entries">
      {{entry}}
    </div>
  `
})
export class AppComponent implements AfterViewChecked {

  constructor(private elementRef: ElementRef) {}

  entries = ['a', 'b', 'c'];

  ngAfterViewChecked(): void {
    const divs = this.elementRef.nativeElement.querySelectorAll('div');
    divs.forEach(div => div.style.background = 'red');
  }

}

这篇关于Angular 5 - 如何在使用 *ngFor 创建 HTML 元素时调用函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 02:06