以下是在View中使用ViewChild引用html中的#h1
:
import { Component, ElementRef, ViewChild } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<h1 #h1 *ngIf="showh1">
Welcome to {{title}}!
</h1>
`,
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
public showh1: boolean = false;
@ViewChild('h1') h1: ElementRef;
ngOnInit() {
setTimeout(() => { //http.get in actual scenario
this.showh1 = true;
console.log('h1:' + this.h1); //h1:undefined
setTimeout(() => {
console.log('h2:' + this.h1); //h2:[object Object]
}, 1);
}, 1000);
}
}
为什么this.h1
undefined
位于console.log('h1:' + this.h1);
?
答案 0 :(得分:1)
因为传递给ngIf的条件还没有被该点的变化检测重新评估,所以元素还没有在视图中。
您需要了解在代码的每条指令之后都没有进行更改检测和dom更新。即使这是可能的,也会使表现变得可怕。
循环基本上是
showh1
)