Angular 4根据组件名称动态创建出组件的方法教程


Posted in Javascript onNovember 01, 2017

一、理解angular组件

组件是一种特殊的指令,使用更简单的配置项来构建基于组件的应用程序架构,这样他能简单地写app,通过类似的web Component 或者angular2的样式。web Component 是一个规范。马上就要成为标准。

应用组件的优点:

  • 比普通指令配置还简单
  • 提供更好的默认设置和最好的实践
  • 对基于组建的应用架构更优化。
  • 对angular2的升级更平滑。

不用组建的情况:

  • 对那些在 compile或者pre-link阶段要执行操作的指令,组件不能用,因为无法到达那个阶段。
  • 如果你想定义指令的 priority,terminal,multi-element,也不能用。
  • 组件只能通过元素标签触发,其他的只能用命令。

二、动态创建组件

  • 说说场景先,比我写了一些组件,这此组件内容都很少,弹出的对话框也许只有一行数据,也有可能是一个表单等,或都一些多选的,单选的选项等。
  • 网上有好多,动态创建组件的Demo,都不是很满意,愿意就是要动态创建组件的时候,传入的你即将要创建的组件对象进去,然后把这个放到页面里显示出来。这算什么动态创建呀,我就想传一个组件的名字,然后就能把他创建出来。
  • 之前写过C#动态创建类,都是给一个类的名称,然后通过反射将类创建出来,然后能过接口过滤转成接口调用方法或, invoke 某个方法等进行操作。像这种才是我想要的效果。
  • 给个名称,然后就把这个组件创建出来,通过输入一些参数对创建出来的组件进行赋值,输出一些参数(主就输出是事件了,比较点击组件上的按钮触发相应的事件等)。

说了这么多,先来个例子吧。

Angular 4根据组件名称动态创建出组件的方法教程

上面那张图很简单就是一个输入文本的一个弹框。

下面这个就有点复杂了,有数据传入,事件绑定等

Angular 4根据组件名称动态创建出组件的方法教程

主了调用起来方便,我把这些都封装成了一个方法:三个参数

  • 要创建的组件名称
  • 要传入组件的参数
  • 组件输出的事件
Utility.$ShowDialogComponent('ComponentName', {
  Params1,Params2...
 }, {
  onEventName1:()=>{},
  ...
 });

由于我动态创建的组件都是以弹框形式出来,所以我把动态创建的步骤放到了,弹框组件里。

创建Dialog.ts,文件,

@Component({
 selector: 'xtn-mode-dialog',
 templateUrl: './Dialog.html',
 styleUrls: ['./Dialog.scss'],
 animations: [ // 弹框的添加一个动画效果,由小到大显示,关闭时候,由大小到最后不见了。
 trigger('TriggerState', [
  state('inactive', style({ transform: 'scale(0.1)' })),
  state('active', style({ transform: 'scale(1)' })),
  transition('inactive => active', animate('150ms ease-in')),
  transition('active => inactive', animate('150ms ease-out')),
 ])
 ]
})
export class XtnDialog implements OnInit, OnDestroy, OnChanges, AfterContentChecked, AfterContentInit {
 // 依赖注入动态创建组件的工厂类
 constructor(private resolver: ComponentFactoryResolver) {
 }
 // 内容检查,主要是判断是打开还是关闭弹框。
 ngAfterContentChecked(): void {}
 // 销毁操作
 ngOnDestroy(): void {}
 // 这里就是动态创建的组件地方法
 LoadComponent(self:any){}
 ngAfterContentInit(): void {}
 ....
}

就不把代码张贴里了,查看全部代码可以点击这里展示出几个方法吧,具体详情可能点击

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
SUN的《AJAX与J2EE》全文译了
Feb 23 Javascript
鼠标拖动实现DIV排序示例代码
Oct 14 Javascript
Query中click(),bind(),live(),delegate()的区别
Nov 19 Javascript
鼠标选择动态改变网页背景颜色的JS代码
Dec 10 Javascript
调用jQuery滑出效果时闪烁的解决方法
Mar 27 Javascript
JavaScript中利用各种循环进行遍历的方式总结
Nov 10 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
Dec 16 Javascript
vue实现tab切换外加样式切换方法
Mar 16 Javascript
vue 左滑删除功能的示例代码
Jan 28 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
Aug 29 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
Mar 29 Javascript
JS新手入门数组处理的实用方法汇总
Apr 07 Javascript
js前端导出Excel的方法
Nov 01 #Javascript
JS二分查找算法详解
Nov 01 #Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 #Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
Nov 01 #Javascript
bootstrap Table的一些小操作
Nov 01 #Javascript
react-native fetch的具体使用方法
Nov 01 #Javascript
Vue异步加载about组件
Oct 31 #Javascript
You might like
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
学习PHP Cookie处理函数
2016/08/09 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
解决JS中乘法的浮点错误的方法
2014/01/03 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
为Python的web框架编写前端模版的教程
2015/04/30 Python
Python中线程编程之threading模块的使用详解
2015/06/23 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
在keras下实现多个模型的融合方式
2020/05/23 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
舞蹈教育学专业推荐信
2013/11/27 职场文书
项目开发计划书
2014/01/09 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
贺卡寄语大全
2014/04/11 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书