ng-content
是一个占位符,有些相似于router-outlet
。segmentfault
之前举の例子,父组件包含子组件都是直接指明子组件的selector
,好比子组件的selector
叫app-child
,那么嵌入父组件时直接指明便可:app
<app-child></app-child>
这是很硬性的编码,而ng-content
就是用来替代这种硬性编码的。编码
好比有个父组件这样定义:code
@Component({ selector: 'app-parent', template: ` <p>Parent Component</p> <div style="background: cyan"> <ng-content></ng-content> </div> ` })
它表示被放进的内容的背景色统一设置为cyan
。router
接下来就要将子组件放入父组件中,放置的方式很简单,在根组件中将app-child
插入到app-parent
中便可:生命周期
<app-parent> <app-child></app-child> </app-parent>
上例中只有一个投影,那么多个投影怎么办呢?<ng-content>
支持一个 select
属性,能够让你在特定的地方投射具体的内容。该属性支持 CSS 选择器(my-element
,.my-class
,[my-attribute]
,...)来匹配你想要的内容。若是 ng-content
上没有设置 select
属性,它将接收所有内容,或接收不匹配任何其余 ng-content 元素的内容。element
好比父组件上有两个可投影的位置,一个背景为浅绿,一个为粉红:get
<div style="background: cyan"> <ng-content select="[name=child]"></ng-content> </div> <div style="background: pink"> <ng-content select=".red"></ng-content> </div>
此时能够在根组件上定义以下:string
<app-parent> <app-child class="red"></app-child> <app-child name="child"></app-child> </app-parent>
这样就能够对号入座了!it
理解了ng-content
就能够使用@ContentChild
装饰器来调用投影内容了,它和@ViewChild
很是相似,就很少作介绍了,其异同点列举以下:
相同点
不一样点