angular6.x中ngTemplateOutlet指令的使用示例


Posted in Javascript onAugust 09, 2018

在使用angular进行开发的时候,通过属性绑定向组件内部传值的方式,有时候并不能完全满足需求,比如我们写了一个公共组件,但是某个模板使用这个公共组件的时候,需要在其内部添加一些标签内容,这种情况下,除了使用ngIf/ngSwitch预先在组件内部定义之外,就可以利用ngTemplateOutlet指令向组件传入内容.

ngTemplateOutlet指令类似于angularjs中的ng-transclude,vuejs中的slot.

ngTemplateOutlet是结构型指令,需要绑定一个TemplateRef类型的实例.

使用方式如下:

@Component({
 selector: 'app',
 template: `
  <h1>Angular's template outlet and lifecycle example</h1>
  <app-content [templateRef]="nestedComponentRef"></app-content>
  <ng-template #nestedComponentRef let-name>
   <span>Hello {{name}}!</span>
   <app-nested-component></app-nested-component>
  </ng-template>
 `,
})
export class App {}
@Component({
 selector: 'app-content',
 template: `
  <button (click)="display = !display">Toggle content</button>
  <template 
    *ngIf="display" 
    *ngTemplateOutlet="templateRef context: myContext">
  </template>
 `,
})
export class Content {
 display = false;
 @Input() templateRef: TemplateRef;
 myContext = {$implicit: 'World', localSk: 'Svet'};
}
@Component({
 selector: 'app-nested-component',
 template: `
  <b>Hello World!</b>
 `,
})
export class NestedComponent implements OnDestroy, OnInit {
 
 ngOnInit() {
  alert('app-nested-component initialized!');
 }
 
 ngOnDestroy() {
  alert('app-nested-component destroyed!');
 }
 
}

代码中除了跟组件外定义了两个组件

  1. 容器组件:app-content
  2. 传递进去的内容组件:app-nested-component

app-content组件接收一个TemplateRef类型的输入属性templateRef,并在模板中将其绑定到了ngTemplateOutlet指令,当组件接收到templateRef属性时,就会将其渲染到ngTemplateOutlet指令所在的位置.

上例中,app-content组件templateRef属性的来源,是在根组件的模板内,直接通过#符号获取到了app-nested-component组件所在<ng-template>的引用并传入的.

在实际应用中,除了这种方式,也可以直接在组件内部获取TemplateRef类型的属性并绑定到ngTemplateOutlet指令.

比如在容器组件为模态框的情况下,并不能通过模板传值,就可以使用下面这种方式:

@ViewChild('temp') temp: TemplateRef<any>

 openDialog(){
  this.dialog.open(ViewDialogComponent, {data: this.temp)
 }

在容器组件中还可以定义被传递内容的上下文(上例app-content组件中的myContext属性),其中的$implicit属性作为默认值,在被传递的内容中可以以重命名的方式访问(上例let-name),对于上下文中其他的属性,就需要通过let-属性名的方式访问了.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
非常不错的一个javascript 类
Nov 07 Javascript
javascript hasFocus使用实例
Jun 29 Javascript
XMLHTTP 乱码的解决方法(UTF8,GB2312 编码 解码)
Jan 12 Javascript
js漂浮广告实现代码
Aug 15 Javascript
JavaScript中获取Radio被选中的值
Nov 11 Javascript
浅谈jquery中next与siblings的区别
Oct 27 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
js自定义Tab选项卡效果
Jun 05 Javascript
Angular4如何自定义首屏的加载动画详解
Jul 26 Javascript
vue-cli3+typescript初体验小结
Feb 28 Javascript
JS实现随机抽取三人
Nov 06 Javascript
Vue.js中的高级面试题及答案
Jan 13 Javascript
koa上传excel文件并解析的实现方法
Aug 09 #Javascript
使用layer弹窗和layui表单实现新增功能
Aug 09 #Javascript
vue-cli初始化项目中使用less的方法
Aug 09 #Javascript
video.js 实现视频只能后退不能快进的思路详解
Aug 09 #Javascript
JavaScript面向对象继承原理与实现方法分析
Aug 09 #Javascript
vue使用ajax获取后台数据进行显示的示例
Aug 09 #Javascript
vue中Axios的封装与API接口的管理详解
Aug 09 #Javascript
You might like
PHP新手上路(七)
2006/10/09 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
python快速排序代码实例
2013/11/21 Python
python实现sublime3的less编译插件示例
2014/04/27 Python
Python从零开始创建区块链
2018/03/06 Python
Python扩展内置类型详解
2018/03/26 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
python实现计算器功能
2019/10/31 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
党员对照检查剖析材料
2014/10/13 职场文书
退学证明范本3篇
2014/10/29 职场文书
毕业生入职感言
2015/07/31 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
MySQL 慢查询日志深入理解
2021/04/22 MySQL
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers