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 相关文章推荐
jquery tools系列 expose 学习
Sep 06 Javascript
在网页中使用document.write时遭遇的奇怪问题
Aug 24 Javascript
js 判断脚本加载完毕的代码
Jul 13 Javascript
jQuery控制图片的hover效果(smartRollover.js)
Mar 18 Javascript
JS中处理时间之setUTCMinutes()方法的使用
Jun 12 Javascript
javascript实现的简单的表单验证
Jul 10 Javascript
贴近用户体验的Jquery日期、时间选择插件
Aug 19 Javascript
webpack实现热更新(实施同步刷新)
Jul 28 Javascript
Vue from-validate 表单验证的示例代码
Sep 26 Javascript
vue 子组件向父组件传值方法
Feb 26 Javascript
vue 父组件调用子组件方法及事件
Mar 29 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 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
服务器端解压缩zip的脚本
2006/12/22 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
Bootstrap每天必学之标签页(Tab)插件
2020/08/09 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
2016/08/29 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
德国箱包网上商店:koffer24.de
2016/07/27 全球购物
销售人员自我评价怎么写
2013/09/19 职场文书
党章学习思想汇报
2014/01/14 职场文书
酒吧创业计划书
2014/01/18 职场文书
实习协议书范本
2014/04/22 职场文书
幼师大班个人总结
2015/02/13 职场文书
民政局2016年“六一”儿童节慰问活动总结
2016/04/06 职场文书
导游词之青岛崂山
2019/12/27 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang
python爬虫之selenium库的安装及使用教程
2021/05/23 Python
MySql分区类型及创建分区的方法
2022/04/13 MySQL