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 学习笔记 选择器之三
Jul 23 Javascript
juqery 学习之三 选择器 简单 内容
Nov 25 Javascript
Jquery封装tab自动切换效果的具体实现
Jul 13 Javascript
一个JavaScript变量声明的知识点
Oct 28 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
Dec 08 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
Aug 26 Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
JavaScript实现重力下落与弹性效果的方法分析
Dec 20 Javascript
详解在React里使用&quot;Vuex&quot;
Apr 02 Javascript
详解KOA2如何手写中间件(装饰器模式)
Oct 11 Javascript
JavaScript解析JSON数据示例
Jul 16 Javascript
Vue props中Object和Array设置默认值操作
Jul 30 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实现用于删除整个目录的递归函数
2015/03/16 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
[57:59]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第一场 11.05
2020/11/05 DOTA
详解如何设置Python环境变量?
2019/05/13 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
CSS3属性使网站设计增强同时不消弱可用性
2009/08/29 HTML / CSS
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
世界最大的票务市场:viagogo
2017/02/16 全球购物
上海某公司.net方向笔试题
2014/09/14 面试题
网络方面基础面试题
2012/11/16 面试题
儿科护理实习自我鉴定
2013/09/19 职场文书
金属材料工程个人求职的自我评价
2013/12/04 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
十八大感想感言
2014/02/10 职场文书
公司运动会策划方案
2014/05/25 职场文书
经济贸易系求职信
2014/08/04 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
年会邀请函范文
2015/01/30 职场文书
技术员个人工作总结
2015/03/03 职场文书
房屋所有权证明
2015/06/19 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
入党心得体会
2019/06/20 职场文书
4种非常实用的python内置数据结构
2021/04/28 Python