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学习笔记二 实现可编辑的表格
Apr 09 Javascript
超简单JS二级、多级联动的简单实例
Feb 18 Javascript
辨析JavaScript中的Undefined类型与null类型
May 26 Javascript
url中的特殊符号有什么含义(推荐)
Jun 17 Javascript
浅析JavaScript中作用域和作用域链
Dec 06 Javascript
vue实现添加标签demo示例代码
Jan 21 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
Mar 08 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
Bootstrap一款超好用的前端框架
Sep 25 Javascript
koa源码中promise的解读
Nov 13 Javascript
vue中子组件传递数据给父组件的讲解
Jan 27 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
Oct 20 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 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
PHP中全面阻止SQL注入式攻击分析小结
2012/01/30 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
JS 控制小数位数的实现代码
2011/08/02 Javascript
JS跨域总结
2012/08/30 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
jquery取消选择select下拉框示例代码
2014/02/22 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
JS+CSS实现随机点名(实例代码)
2019/11/04 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
python利用socketserver实现并发套接字功能
2018/01/26 Python
python format 格式化输出方法
2018/07/16 Python
python修改txt文件中的某一项方法
2018/12/29 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
Python常用编译器原理及特点解析
2020/03/23 Python
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
推荐信模板
2014/05/09 职场文书
大型演出策划方案
2014/05/28 职场文书
应用心理学专业求职信
2014/08/04 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技