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 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 Javascript
javascript数组组合成字符串的脚本
Jan 06 Javascript
jMessageBox 基于jQuery的窗口插件
Dec 09 Javascript
jQuery实现本地预览上传图片功能
Jan 08 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
Jun 28 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
Sep 13 Javascript
Mac中安装nvm的教程分享
Dec 11 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
vue左右侧联动滚动的实现代码
Jun 06 Javascript
Node.js开发之套接字(socket)编程入门示例
Nov 05 Javascript
JavaScript定时器使用方法详解
Mar 26 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
Aug 25 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
Ajax PHP分页演示
2007/01/02 PHP
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
JavaScript 拾漏补遗
2009/12/27 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
2016/12/24 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
js技巧之十几行的代码实现vue.watch代码
2018/06/09 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
2020/06/05 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
python框架flask表单实现详解
2019/11/04 Python
python中xlutils库用法浅析
2020/12/29 Python
幼儿教师国培感言
2014/02/19 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
司法助理专业自荐书
2014/06/13 职场文书
公司应聘求职信
2014/06/21 职场文书
公司管理建议书
2015/09/14 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server