这是由Component提供的一个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);
?
因为,由于传递给ngIf的条件尚未通过此时的更改检测进行重新评估,因此该元素尚未在视图中。
您需要了解在代码的每条指令之后都不会执行更改检测和dom更新。即使这是可能的,也会使表现变得可怕。
循环基本上是
showh1
)