继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

ng-template,ng-content,ng-container

潇13
关注TA
已关注
手记 1
粉丝 3
获赞 3

ng-template


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

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

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

元素<template>

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

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

https://img4.mukewang.com/5ac07ec200011da907160130.jpg

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

https://img3.mukewang.com/5ac07ece00016ad807020198.jpg

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

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

用处

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

https://img1.mukewang.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.mukewang.com/5ac07f510001c4b206700438.jpg

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

ng-container


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

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

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

https://img1.mukewang.com/5ac07f6600018dcc06320248.jpg

https://img2.mukewang.com/5ac07f7000010e2808060116.jpg

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

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

https://img4.mukewang.com/5ac07f85000147cf08100096.jpg

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


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP