一个骚操作 内容分发
父组件中引用子组件,正常里面是不需要加 code 的, 直接引入一个壳就行
但是由于特殊逻辑需要而需要在父组件里写点东西然后子组件里显示的时候就这样
这也是父组件向子组件传递内容的一个模式
父组件code
<app-recipes-list #index (othername)="getData($event)">
<p>这是子组件中间的code </p>
</app-recipes-list>
子组件code:
<ng-content></ng-content>
-
钩子函数的标志 ng 开头
每个接口都有一个钩子方法,它们的名字就是由姐接口名加上 ng 前缀构成的
比如 OnInit 接口的钩子方法就是 ngOnInit - import { OnChanges } from '@angular/core'; //引用狗子函数时要声明
export class ShopingEditComponent implements OnInit,OnChanges {
// 在class 后面也要再次引入
ngOnChanges(changes: SimpleChanges){}
} - constructor(){//先执行}
ngOnInit(){ //后执行}
页面加载时它们执行一遍,每次点击页面上的按钮之后,它们就又再次执行一遍 - 钩子函数只有如下四个只能用于组件, 其他均能用于组件和指令
ngAfterContentInit() ngAfterContentChecked() ngAfterViewInit() ngAfterViewChecked() - 当 Angular 使用构造函数新建一个组件或指令后,就会按下面的顺序在特定时刻调用这些生命周期钩子方法:
ngOnChanges() 当 Angular(重新)设置数据绑定输入属性时响应。 该方法接受当前和上一属性值的 SimpleChanges 对象
在 ngOnInit() 之前以及所绑定的一个或多个输入属性的值发生变化时都会调用。ngOnInit() 在 Angular 第一次显示数据绑定和设置指令/组件的输入属性之后,初始化指令/组件。
在第一轮 ngOnChanges() 完成之后调用,只调用一次。ngDoCheck() 检测,并在发生 Angular 无法或不愿意自己检测的变化时作出反应。
在每个变更检测周期中,紧跟在 ngOnChanges() 和 ngOnInit() 后面调用。ngAfterContentInit() 当 Angular 把外部内容投影进组件/指令的视图之后调用。
第一次 ngDoCheck() 之后调用,只调用一次。ngAfterContentChecked() 每当 Angular 完成被投影组件内容的变更检测之后调用。
ngAfterContentInit() 和每次 ngDoCheck() 之后调用ngAfterViewInit() 当 Angular 初始化完组件视图及其子视图之后调用。
第一次 ngAfterContentChecked() 之后调用,只调用一次。ngAfterViewChecked() 每当 Angular 做完组件视图和子视图的变更检测之后调用。
ngAfterViewInit() 和每次 ngAfterContentChecked() 之后调用。ngOnDestroy() 每当 Angular 每次销毁指令/组件之前调用并清扫。
在这儿反订阅可观察对象和分离事件处理器,以防内存泄漏。
在 Angular 销毁指令/组件之前调用。
钩子函数 (ng 开头)的时候引用的时候要先声明
例如:
import { OnInit} from "@angular/core";
然后要在类后边写继承 implements OnInit
然后在类里写方法: ngOnInit(){}
每个组件都有自己独立的生命周期
视图封装
- 等以后研究 什么是 shadow dom?
- 主组件的 css (app.component.css), 不会影响其他子组件里面的元素的样式, 并不继承
- 子组件里自己写的 css 会改变 子组件自己的元素样式, F12 我们可以发现, css 是以 Shadow DOM CSS 的形式发挥作用的
如 我们实际写的 css 是 p{color:red;} F12 看到在p 标签上显示的是 p[_ngcontent-c2] - 在组件的 ts 文件的 styleUrls: 下面写上 encapsulation: ViewEncapsulation.None
Shadow DOM CSS
import {ViewEncapsulation} from '@angular/core';- ViewEncapsulation.None : 没有阴影DOM。样式不在组件范围内。在 ViewEncapsulation.None中,风格被移动到DOM的头部,而不是作用域的组件。组件没有Shadow DOM,组件样式可以影响DOM中的所有节点。 我们的样式成为了全局的样式
- ViewEncapsulation.Native : Angular将为组件创建Shadow DOM。样式的范围是组件。ViewEncapsulation.Native Angular创建了一个Shadow DOM,并将该风格的作用域限定为该Shadow DOM。
- ViewEncapsulation.Emulated: Angular不会为该组件创建Shadow DOM。样式将被限定于组件。这个是默认值。
-