ng-template和ngTemplateOutlet
我们可以使用ng-container, ng-template和ngTemplateOutlet 三者的配合,实现动态渲染某个模板视图的目的。
ng build之后,在Chrome开发者工具里看到ng文件夹下对应的html文件:
<ng-template #inputTemplate><input><h1>ngTemplateOutlet的用法</h1>
</ng-template><ng-container *ngTemplateOutlet="inputTemplate"></ng-container>
tNode指向源代码里的ng-container节点:
ngTemplateOutlet的实现:
/*** @ngModule CommonModule** @description** Inserts an embedded view from a prepared `TemplateRef`.** You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.* `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding* by the local template `let` declarations.** @usageNotes* ```* <ng-container *ngTemplateOutlet="templateRefExp; context: contextExp"></ng-container>* ```** Using the key `$implicit` in the context object will set its value as default.** ### Example** {@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}** @publicApi*/
@Directive({selector: '[ngTemplateOutlet]'})
export class NgTemplateOutlet implements OnChanges {private _viewRef: EmbeddedViewRef<any>|null = null;/*** A context object to attach to the {@link EmbeddedViewRef}. This should be an* object, the object's keys will be available for binding by the local template `let`* declarations.* Using the key `$implicit` in the context object will set its value as default.*/@Input() public ngTemplateOutletContext: Object|null = null;/*** A string defining the template reference and optionally the context object for the template.*/@Input() public ngTemplateOutlet: TemplateRef<any>|null = null;constructor(private _viewContainerRef: ViewContainerRef) {}ngOnChanges(changes: SimpleChanges) {const recreateView = this._shouldRecreateView(changes);if (recreateView) {const viewContainerRef = this._viewContainerRef;if (this._viewRef) {viewContainerRef.remove(viewContainerRef.indexOf(this._viewRef));}this._viewRef = this.ngTemplateOutlet ?viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, this.ngTemplateOutletContext) :null;} else if (this._viewRef && this.ngTemplateOutletContext) {this._updateExistingContext(this.ngTemplateOutletContext);}}
还是老套路,在ngOnChanges里调用ViewContainerRef.createEmbeddedView:
更多Jerry的原创文章,尽在:“汪子熙”:
ng-template和ngTemplateOutlet相关推荐
- cannot bind to cxOutlet since it is not a known property of ng template
我在SAP Spartacus处于运行状态(即ng serve)始终处于运行状态时,进行代码热修改,经常遇到此类错误消息 退出ng serve,重新执行即可: 更多Jerry的原创文章,尽在:&quo ...
- Angular 指令ngTemplateOutlet的运行原理单步调试
看个具体的例子,我在Component html里用<ng container *ngTemplateOutlet定义了一个id为greet的template的插入点: #greet模板的内容: ...
- Angular NgTemplateOutlet的一个例子
NgTemplateOutlet:Inserts an embedded view from a prepared TemplateRef. 语法: <ng-container *ngTempl ...
- 【Angular 基础入门】——知识点整合
文章目录 快速入门 一.Angular 环境搭建 二.基本概念 模块简介 组件简介 服务与依赖注入 路由 三.基础教程 使用路由 自定义组件 常用结构型指令 事件绑定 模板引用 模板表达式中的运算符 ...
- ngzorro html源码,Angular 中 ngTemplateOutlet 的用法以及ng-zorro源码分析!
一.引言 今天看到文章:https://segmentfault.com/a/1190000015944548 .于是专门研究一下ngTemplateOutlet用法!!!! 官方定义 : NgTem ...
- ng-template、ng-container、ng-content和ngTemplateOutlet、ngProjectAs傻傻分不清!他们究竟是干啥的???
一句话描述5个关键词的作用: ng-template是备胎(模板):通常在html里面作为备用模板,当绑定了对应的#标记的时候才会显示 ng-container是舔狗(虚拟标签):包裹的内容显示,而自 ...
- 您需要了解有关Angular中的ng-template,ng-content,ng-container和* ngTemplateOutlet的所有信息...
It was one of those days when I was busy working on new features for my office project. All a sudden ...
- 必须正确理解的---ng指令中的compile与link函数解析
这个绝对是深入的知识,但看完之后,对NG的理解就很利害啦. http://www.ifeenan.com/angularjs/2014-09-04-%5B%E8%AF%91%5DNG%E6%8C%87 ...
- 关于施加在 div 标签上的 ngTemplateOutlet 指令让 div class 丢失的问题调试
本文描述的应用代码地址:https://github.com/wangzixi-diablo/ngDynamic 问题描述 我在 div 标签页里使用 ngTemplateOutlet 给代码第 11 ...
最新文章
- 企业级java springcloud b2bc商城系统开源源码二次开发-负载均衡策略...
- 2019金融科技风往哪儿吹?蚂蚁金服联合20余家金融机构预测新年热点:5G、区块链上榜...
- tomcat手动发布
- angular 使用rxjs 监听同级兄弟组件数据变化
- python多线程调度_python并发编程之进程、线程、协程的调度原理(六)
- android折叠listview,android – 如何在listview中展开和折叠项目
- Android图片特效处理之图片叠加
- php反选全选代码,jQuery中实现全选,反选实例代码 (推荐)
- 华为Mate 30 Lite曝光:搭载麒麟810+20W快充
- 9款极具创意的HTML5/CSS3进度条动画
- PHP:函数赋参数默认初值
- include/autoconfig.mk
- 如何从零开始准备数学建模竞赛?
- 大卫科波菲尔优秀读后感范文4000字
- 2022年北京购房攻略二 (城区交通篇)
- 上海 三险一金 税后工资计算
- fastadmin-微信小程序实战课程:todolist项目文档(课件)整理汇总
- The OCD Brain: how animal research helps us understand a devastating condition
- 环境会计信息披露问题研究
- 毕业设计-模拟数据集生成笔记
热门文章
- 云将与行业走向深度融合
- JSON (一) JSON语法和数据类型
- UrlRewrite(URL重写)--ASP.NET中的实现
- Hadoop实战-中高级部分 之 Hadoop 集群安装
- 重置oracle 11G的system、sys密码
- java编程思想 学习笔记(2)
- 关于asp.net中partial,asp.net编译笔记
- 方立勋_30天掌握JavaWeb_Session
- Java性能调优之让程序“飞”起来-Java 代码优化
- SQL Server之体系结构