Angular 学习笔记 ,三 - LifeCycle和ViewEncapsulation
一. 组件的LifeCycle
ngOnChanges | 绑定输入属性更改后调用 |
ngOnInit | 组件初始化后调用 |
ngDoCheck | 在每次更改检测运行期间调用 |
ngAfterContentInit | 在将内容(ng-content)投影到视图中之后调用 |
ngAfterContentChecked | 每次检查投影内容时调用 |
ngAfterViewInit | 在组件的视图(和子视图)初始化后调用 |
ngAfterViewChecked | 每次检查视图(和子视图)时调用 |
ngOnDestroy | 组件即将销毁时调用 |
二. ViewEncapsulation
@ViewEncapsulation
定义可用于Component的Component的模板和样式封装选项。
Emulated (0) : 通过向主机元素添加包含替代ID的属性,并对通过styles或styleUrls提供的样式规则进行预处理,然后将新的Host Element属性添加到所有选择器,来模拟样式的本机作用域。
None(2): 不提供ViewEncapsulation
ShadowDom (3) : 使用Shadow DOM封装样式。对于DOM,这意味着使用现代的Shadow DOM并为组件的Host元素创建ShadowRoot。
三. ViewChild
@ViewChild (from angular 8)
用于配置视图查询的属性装饰器。变更检测器在视图DOM中查找与选择器匹配的第一个元素或指令。如果视图DOM更改,并且有一个新的子项与选择器匹配,则该属性将更新。
Example:
1 import {Component, Directive, Input, ViewChild} from '@angular/core'; 2 3 @Directive({selector: 'pane'}) 4 export class Pane { 5 @Input() id!: string; 6 } 7 8 @Component({ 9 selector: 'example-app', 10 template: ` 11 <pane ></pane> 12 <pane ></pane> 13 14 <button (click)="toggle()">Toggle</button> 15 16 <div>Selected: {{selectedPane}}</div> 17 `, 18 }) 19 export class ViewChildComp { 20 @ViewChild(Pane) 21 set pane(v: Pane) { 22 setTimeout(() => { 23 this.selectedPane = v.id; 24 }, 0); 25 } 26 selectedPane: string = ''; 27 shouldShow = true; 28 toggle() { 29 this.shouldShow = !this.shouldShow; 30 } 31 }