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 相关文章推荐
js中的cookie的读写操作示例详解
Apr 17 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
node.js中的fs.symlinkSync方法使用说明
Dec 15 Javascript
jquery转盘抽奖功能实现
Nov 13 Javascript
js+ajax实现获取文件大小的方法
Dec 08 Javascript
JavaScript轻松创建级联函数的方法示例
Feb 10 Javascript
jquery实现动态添加附件功能
Oct 23 jQuery
傻瓜式vuex语法糖kiss-vuex整理
Dec 21 Javascript
vue仿ios列表左划删除
Sep 26 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
Jun 02 Javascript
openlayers4.6.5实现距离量测和面积量测
Sep 25 Javascript
VUE使用draggable实现组件拖拽
Apr 06 Vue.js
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
使用数据库保存session的方法
2006/10/09 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
javascript控制层显示或隐藏的方法
2015/07/22 Javascript
javascript关于继承解析
2016/05/10 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
分享一个精简的vue.js 图片lazyload插件实例
2017/03/13 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
python判断windows隐藏文件的方法
2014/03/21 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
Python 多线程实例详解
2017/03/25 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
python获取服务器响应cookie的实例
2018/12/28 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
Windows系统下pycharm中的pip换源
2020/02/23 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
波兰灯具、照明和LED购物网站:Lampy.pl
2019/03/11 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
电子专业推荐信范文
2013/11/18 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
2015年餐厅服务员工作总结
2015/04/23 职场文书
高二数学教学反思
2016/02/18 职场文书
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang