使用angular7的ng-content插槽进行组件内容投射

在实际的使用中,我们会用到内容投影,即插槽的概念。在vue中可以通过slot来标记插槽,从而达到从父组件向子组件传递显示内容。

在angular中,同样可以使用ng-content来实现与vue中的slot同样的功能和效果。

简单投影(单个插槽| 默认插槽| 匿名插槽)

父组件anchor.component.html:

<app-slot>
    <h2>我是嵌入的外部内容,相当于vue的slot</h2>
    <p>我是ng content 内容投影</p>
    <span>ng content测试</span>
</app-slot>

子组件:slot.component.html

<div>
    <ng-content></ng-content>
</div>

效果:
在这里插入图片描述

针对性投影(具名插槽)

针对性投影,相当于vue中slot的name属性和组件的slot属性的映射关系

父组件anchor.component.html:

<app-slot>
    <h2 class="slot">我是嵌入的外部内容,相当于vue的slot</h2>
    <p>我是ng content 内容投影</p>
    <span>ng content测试</span>
</app-slot>

子组件:slot.component.html

<div>
    <ng-content select="p"></ng-content>
    <hr>
    <ng-content select=".slot"></ng-content>
    <hr>
    <ng-content></ng-content>
</div>

效果截图:
在这里插入图片描述

ngProjectAs

通过ng-content的select属性可以指定html标签或者组件投射ng-content位置上来。但是呢有个限制条件。不管是select标签或者组件的名字、或者class、或者是属性他们都是作用在直接子节点上。还是用一个简单但额实例来说明

父组件anchor.component.html:

<app-slot>
    <ng-container ngProjectAs="div">
        <div>div</div>
        <span>span</span>
    </ng-container>
</app-slot>

子组件:slot.component.html

<div>
    <ng-content select="div"></ng-content>
</div>

总结:
ng-content支持一个 select 属性,可以让你在特定的地方投射具体的内容。该属性支持 CSS 选择器(标签选择器、类选择器、属性选择器、…)来匹配你想要的内容。如果 ng-content 上没有设置 select 属性,它将接收全部内容,或接收不匹配任何其他 ng-content 元素的内容。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值