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创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
Jun 28 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
Dec 15 Javascript
Jquery AJAX POST与GET之间的区别
Nov 14 Javascript
分享五个有用的jquery小技巧
Oct 08 Javascript
jquery淡入淡出效果简单实例
Jan 14 Javascript
Sort()函数的多种用法
Mar 20 Javascript
深入理解JavaScript中的for循环
Feb 07 Javascript
详解angular element()方法使用
Apr 08 Javascript
Angular2使用Angular CLI快速搭建工程(一)
May 21 Javascript
vue 中directive功能的简单实现
Jan 05 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
Apr 23 Javascript
js+canvas实现纸牌游戏
Mar 16 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
常用的php ADODB使用方法集锦
2008/03/25 PHP
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
js 数组操作代码集锦
2009/04/28 Javascript
javascript 获取表单file全路径
2009/12/31 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
一些javascript一些题目的解析
2010/12/25 Javascript
javascript之典型高阶函数应用介绍二
2013/01/10 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
jquery统计复选框选中示例
2013/11/05 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
2014/08/11 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
vue router仿天猫底部导航栏功能
2017/10/18 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
javascript使用substring实现的展开与收缩文字功能示例
2019/06/17 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
在Python中使用异步Socket编程性能测试
2014/06/25 Python
Python实现数据库编程方法详解
2015/06/09 Python
python pygame实现2048游戏
2018/11/20 Python
Python 脚本拉取 Docker 镜像问题
2019/11/10 Python
简单的JAVA编程面试题
2013/03/19 面试题
军训的自我鉴定
2013/12/10 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
会计系毕业生求职信
2014/05/28 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
比较node.js和Deno
2021/04/27 Javascript