架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9791|回复: 3

[Angular] Angular 9 系列(一)动态加载组件

[复制链接]
发表于 2020-5-29 16:40:00 | 显示全部楼层 |阅读模式
Angular 9 系列(一)动态加载组件
https://www.itsvse.com/thread-9238-1-1.html

Angular 9 系列(二)动态组件传参
https://www.itsvse.com/thread-9245-1-1.html

Angular 9 系列(三)订阅动态组件事件
https://www.itsvse.com/thread-9246-1-1.html

Angular 9 系列(四)自定义 Pipe 管道
https://www.itsvse.com/thread-9248-1-1.html

Angular 9 系列(五)格式化金额货币格式
https://www.itsvse.com/thread-9249-1-1.html



组件的模板不会永远是固定的。应用可能会需要在运行期间加载一些新的组件。

使用场景:

1.页面加载根据不同的参数加载不同的组件,显示不同的效果
2.页面有多个元素组成,一开始不需要全部显示,用户点击之后才会显示具体的信息,例如:tab 选项卡、动态弹出模态框等。

本文的使用场景是2,试想一下,如果不使用动态加载的情况下,当打开主界面,所有页面的隐藏的组件都会被加载,所有组件调用自己对应的接口服务,往往,我们不需要看到所有的信息,这样就极大的浪费了资源,而且还有可能造成主界面加载缓慢,影响用户体验

ng中动态加载组件的两种方式:

加载已经声明的组件: 使用ComponentFactoryResolver,将一个组件实例呈现到另一个组件视图上;
动态创建组件并加载:使用ComponentFactory和Compiler,创建和呈现组件
根据我们的需求,各个组件是事先开发好的,需要在同一个组件上显示出来。所以第一种方式符合我们的要求。

使用ComponentFactoryResolver动态加载组件,需要先了解如下概念:

  • ViewChild:属性装饰器,通过它可以获得视图上对应的元素;
  • ViewContainerRef:视图容器,可在其上创建、删除组件;
  • ComponentFactoryResolver:组件解析器,可以将一个组件呈现在另一个组件的视图上。

首先,我们看下效果图,点击modal1按钮动态加载modal1组件,点击modal2按钮动态加载modal2组件。

component.gif

首先,我们创建一个angular项目。

创建4个组件,分别是index、modal1、modal2、modal3,其中,modal1和modal2是我们动态加载的组件。

index component

html:

ts:

modal1 component

html:

ts:


modal2 component

html:


ts:

modal3 component

html:


ts:


我们对3个modal,都在构造函数进行了打印自己的名称。

modal1和modal2,都是动态加载的,只有点击按钮去加载的时候,才会触发执行构造函数,modal3没有使用动态加载,父界面加载完成后,modal3界面的构造函数会立马执行。

这样就可以看到动态加载的优势了,用不到就不会加载,类似c#中的懒加载。

源码下载:

游客,如果您要查看本帖隐藏内容请回复


参考资料: https://angular.io/guide/dynamic-component-loader






上一篇:CSS中 设置 height:100% 无效的解决方案
下一篇:Azure DevOps 2020(一)初识微软 Azure DevOps(TFS)
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2020-7-24 17:52:58 | 显示全部楼层
Angular 9 系列(一)动态加载组件
https://www.itsvse.com/thread-9238-1-1.html

Angular 9 系列(二)动态组件传参
https://www.itsvse.com/thread-9245-1-1.html

Angular 9 系列(三)订阅动态组件事件
https://www.itsvse.com/thread-9246-1-1.html

Angular 9 系列(四)自定义 Pipe 管道
https://www.itsvse.com/thread-9248-1-1.html

Angular 9 系列(五)格式化金额货币格式
https://www.itsvse.com/thread-9249-1-1.html

Angular 9 系列(六)调用原生JS变量和方法
https://www.itsvse.com/thread-9254-1-1.html

Angular 9 系列(七)css样式作用域
https://www.itsvse.com/thread-9264-1-1.html

Angular 9 系列(八)更新子组件的值通过set触发事件
https://www.itsvse.com/thread-9267-1-1.html

Angular 9 系列(九)#id 选择器在页面应用
https://www.itsvse.com/thread-9278-1-1.html

Angular 9 系列(十)嵌入vconsole、eruda开发者调试面板
https://www.itsvse.com/thread-9286-1-1.html

Angular 9 系列(十一)定义样式的5种方法
https://www.itsvse.com/thread-9305-1-1.html


Angular 9 系列(十二)基于OTP生成动态令牌
https://www.itsvse.com/thread-9325-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2021-2-2 13:56:30 | 显示全部楼层
Angular 10 系列(十三)引入百度 echarts 图表
https://www.itsvse.com/thread-9347-1-1.html

Angular 11 系列(十四)生产环境进行 Debug 调试
https://www.itsvse.com/thread-9348-1-1.html

Angular 11 系列(十五)获取组件高度和动态调整高度
https://www.itsvse.com/thread-9364-1-1.html

Angular 11 系列(十六)页面解析 HTML 源码
https://www.itsvse.com/thread-9376-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2022-10-26 17:27:19 | 显示全部楼层
学习!!!!!!!!!!!!!!
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-24 19:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表