解析视图:

  • 内嵌视图 - 连接到模板的嵌入视图,在组件模板元素中添加模板(DOM元素、DOM元素组)

  • 宿主视图 - 连接到组件的嵌入视图,在组件元素中添加别的组件

使用类说明:

  • ElementRef - 单个HTML元素;用于获取DOM元素;

  • TemplateRef - 一组HTML元素;可以用来创建ViewRef类型的视图(TemplateRef元素实例.createEmbeddedView(null);),也可以作为TemplateRef对象插入到ViewContainerRef实例中;

  • ViewContainerRef - 视图容器,任何DOM元素都可以作为视图容器使用; 它可以用来创建和管理内嵌视图;

创建视图:

1. 创建内嵌视图

  • HTML - parent.component.html
<!-- 视图插入的位置 -->
<ng-container #tempContainer></ng-container><!-- 视图模板 -->
<ng-template #tempElem><h1>TempElem-title</h1><p>TempElem-intro</p>
</ng-template>
  • TS - parent.component.ts

export class ParentComponent implements AfterViewInit {constructor() {}@ViewChild('tempContainer', {read: ViewContainerRef})private tempContainer: ViewContainerRef;@ViewChild('tempElem')private tempElem: TemplateRef<any>;ngAfterViewInit() {// 创建内嵌视图 - 以下任意一种方法都可以this.tempContainer.insert(this.tempElem.createEmbeddedView(null));// this.tempContainer.createEmbeddedView(this.tempElem);}
}
  • 效果如下:

  • 说明:
  • 在 Angular 中,我们可以通过 ViewChild 装饰器来获取视图中定义的模板元素,然后利用 ViewContainerRef对象的 createEmbeddedView() /insert()方法,创建内嵌视图。
  • ViewContainerRef对象的insert方法需要一个ViewRef类型的视图
  • viewContainerRef实例.createEmbeddedView(TemplateRef实例);;viewContainerRef实例(ViewRef实例)

2. 创建宿主视图

第一步: 创建动态组件,并且在组件所在模块的declarations和entryComponents中声明组件;


import {HomeComponent} from './home.component';
import {ListComponent} from './list.component';
import {DetailComponent} from './detail.component';const declare = [HomeComponent,ListComponent,DetailComponent
];@NgModule({declarations: [...declare],entryComponents: [...declare]})

第二步: 定义创建动态组件所需的内容

  • HTML
// 组件切换链接
<a href="javascript:;" (click)="load('home')">home</a>
<a href="javascript:;" (click)="load('list')">list</a>
<a href="javascript:;" (click)="load('detail')">detail</a>// 动态组件容器
<div #dynamic></div>
  • TS
import {HomeComponent} from './home.component';
import {ListComponent} from './list.component';
import {DetailComponent} from './detail.component';export class BackendComponent implements OnInit {// 定义动态组件对象cmpData = {'home': HomeComponent, 'list': ListComponent, 'detail': DetailComponent};// 定义动态组件容器@ViewChild('dynamic', { read: ViewContainerRef }) dmRoom: ViewContainerRef;constructor(private cfr: ComponentFactoryResolver ) { }ngOnInit() {// 默认加载的动态组件this.loadComponent(this.cmpData['home']);}// 定义动态切换组件方法loadComponent(comName): void { // 动态加载组件const com = this.cfr.resolveComponentFactory(comName); this.dmRoom.clear(); // 清空视图this.currentCmp = this.dmRoom.createComponent(com); }// 定义点击事件方法load(name: string) {this.loadComponent(this.cmpData[name]);}     }

转载于:https://www.cnblogs.com/zero-zm/p/9860253.html

Angular 内嵌视图、宿主视图相关推荐

  1. 【数据库】oracle数据库----内嵌视图

    关系视图是数据库对象,创建关系视图实际是对查询定义可重用的需求.但有时,查询定义并不会被重用.此时,创建关系视图便不再适宜------过多的关系视图势必增加数据库的维护成本.oracle提供了内嵌视图 ...

  2. Angular之ngx-permissions的控制视图访问

    Angular之ngx-permissions的控制视图访问 案例 demo https://stackblitz.com/edit/ngx-permissions-iwexsb Permission ...

  3. MySQL内置函数存储过程视图JDBC

    MySQL存储过程&视图&JDBC-笔记 回顾 能够使用内连接进行多表查询 SELECT * FROM 表1 , 表2 WHERE 条件; SELECT * FROM 表1 INNER ...

  4. Django 2.1.3 视图层 内置CBV通用视图

    内置的基于类的通用视图 1. 扩展通用视图 2. 对象的通用视图 3. 制作"友好"的模板上下文 4. 添加额外的上下文 5. 查看对象的子集 6. 动态过滤 7. 执行额外的工作 ...

  5. Razor Page Library:开发独立通用RPL(内嵌wwwroot资源文件夹)

    Demo路径:https://github.com/yanshengjie/RPL.Demo 1. Introduction Razor Page Library 是ASP.NET Core 2.1引 ...

  6. Java实现内嵌浏览器

    创建项目 ---->   导入需要的jar ---->  代码实现 需要的jar: https://pan.baidu.com/s/1MEZ1S0LnKSMGQm24QWgmCw 代码: ...

  7. 标量函数,多语句表值函数,内嵌表值函数

    标量函数返回一个标量(单值)结果,可返回Timestamp,text,Ntext,Image,Table,Cursor 多语句表值函数,返回一条或多条Transact-sql语句建立的表,可在sele ...

  8. MFC基于多文档框架(对话框内嵌office控件(word文档))

    office系列以简便.功能强大的特色发展为当今世界上范围最广.用户最多的办公软件,同时也深受码农的喜欢-.   MFC项目中嵌入office系列软件也是随处可见的,最早接触内嵌office软件是在几 ...

  9. 采用Cloudera-Manager安装CDH时,采用内嵌数据库各数据库用户密码的保存位置

    一.场景描述 在采用Cloudera-Manager安装cdh时,通常使用内嵌的PostgreSQL数据库. Cloudera-Manager除了保存CDH集群的配置元数据的scm数据库外,还为Act ...

最新文章

  1. 爱因斯坦牛顿达尔文投胎中国后
  2. 1126 Eulerian Path (25 分)【难度: 一般 / 欧拉图的判定】
  3. C#反射使用方法过程及步骤
  4. ionic移动开发流程api
  5. Google Analytics 搜索引擎来源
  6. 正确的python变量名_在Python,如何将变量名作为字符串?_others_酷徒编程知识库...
  7. [Vue.js] 深入 -- 案例 - 购物车
  8. 我免费发布的东西,你拿去卖钱,我不平衡
  9. Java 开源博客 Solo 1.6.0 发布 - 新后台
  10. 为PHP添加swoole异步并行扩展
  11. 22_多易教育之《yiee数据运营系统》用户画像-消费行为性别预测篇
  12. win7安装SP1补丁
  13. hdoj2602 0/1背包 动态规划 模版题( Java版)
  14. 2022年全球市场雷达目标模拟器总体规模、主要生产商、主要地区、产品和应用细分研究报告
  15. 2022高等代数笔记整理
  16. Keil--视力保护--背景设置
  17. tailwindcss使用教程
  18. java webservice jws,1 基于jws的webservice项目
  19. jovi语音助手安装包_Jovi语音助手安装包下载-vivoJovi语音助手v3.1.1.0 最新版-腾牛安卓网...
  20. Back-off restarting failed container报错

热门文章

  1. 想学习UI设计,培训的话需要多少钱?
  2. 软件测试行业发展前景怎么样?
  3. java团队名字_作为一名Java工程师,我在DevOps团队都经历了什么
  4. 杨云 中科院计算机所,专家人才库数据----中国科学院计算技术研究所
  5. java就业班学什么呀_传智播客JAVA就业班学习心得
  6. mac mysql ngram_mac 下 sphinx + mysql + php 实现全文搜索(xampp)(3)sphinx 的配置项解析...
  7. asp.net mysql helper_asp.net使用SQLHelper操作数据库
  8. 计算机演示文稿教学实例课件,计算机图形学的教学演示文稿ppt课件.ppt
  9. PSIM软件学习---03 电路的创建与仿真
  10. STM8学习笔记---NTC热敏电阻的使用