为了账号安全,请及时绑定邮箱和手机立即绑定

ng-template,ng-content,ng-container

标签:
AngularJS

ng-template


<ng-template #temp>  测试文本</ng-template>

我们可以看到ng-template在页面渲染之后的样子
https://img1.sycdn.imooc.com//5ac07ea100015ac506440102.jpg

除了<!---->证明它的痕迹以外什么都没有

元素<template>

什么是<template>呢,它是2013年以后才出来的一个元素,是用来声明“模版元素”的。
我们在上面的代码下面将<template>的使用加入进去

<ng-template #temp>  
    测试文本
</ng-template>
<template>  
    测试文本
</template>

https://img1.sycdn.imooc.com//5ac07ec200011da907160130.jpg

页面中还是什么都不显示,但是我们在<template>元素上加入css样式display:block;
页面中就会出现

https://img1.sycdn.imooc.com//5ac07ece00016ad807020198.jpg

这说明<template>元素是一个自带display:none的隐藏元素,只不过二者隐藏的方式不同

<ng-template>的功能与<template>元素类似,都是一个默认隐藏的元素。

用处

在Angular里,通常将它当作一个嵌入式的模版
通过ViewChild获取它的一个实例,可见它是一个TemplateRef实例

https://img1.sycdn.imooc.com//5ac07ede00012afc17000132.jpg

ng-content


Angular2使用<ng-content>元素作内容映射,所谓内容映射,是指在组件内嵌入模版代码,方便定制可复用的组件。
我们定义两个组件<app-wrapper>和<app-counter>来说明<ng-content>的用处。

// <app-wrapper>
import { Component } from '@angular/core';

@Component({  
    selector: 'app-wrapper',  
    template: `    
        <div>      
            <h1>Test ng-content</h1>      
            <!-- <ng-content></ng-content> -->    
        </div>    
        <ng-content>
        </ng-content>  
    `})
export class WrapperComponent {}
// <app-counter>
import { Component, OnInit } from '@angular/core';
@Component({  
    selector: 'app-counter',  
    template: `    <p>{{count}}</p>  `
})
export class CounterComponent {  
    private static id = 1;  
    count: number;  
    
    constructor() {    
        this.count = CounterComponent.id++;  
    }
}

使用:

<app-wrapper>  
    <app-counter>3</app-counter>  
    <app-counter>2</app-counter>  
    <app-counter>1</app-counter>
</app-wrapper>

效果:

https://img1.sycdn.imooc.com//5ac07f510001c4b206700438.jpg

可以看见<app-counter>元素作为内容映射到了<app-wrapper>内部,相当于替换掉了<ng-content>

ng-container


<ng-container>是Angular2定义的一个特殊的tag。

<ng-container>测试文本</ng-container>

上面的代码渲染到页面时:

https://img1.sycdn.imooc.com//5ac07f6600018dcc06320248.jpg

https://img1.sycdn.imooc.com//5ac07f7000010e2808060116.jpg

可以看到<ng-container>并不存在,它仅仅是作为一个容器使用。

<ng-container *ngIf="false">测试文本</ng-container>

https://img1.sycdn.imooc.com//5ac07f85000147cf08100096.jpg

在它之上我们可以使用Angular的指令,而不像<div>之类的元素影响布局。


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消