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 相关文章推荐
Prototype使用指南之form.js
Jan 10 Javascript
打开超链需要“确认”对话框的方法
Mar 08 Javascript
javascript preload&lazy load
May 13 Javascript
js中同步与异步处理的方法和区别总结
Dec 25 Javascript
js加载读取内容及显示与隐藏div示例
Feb 13 Javascript
邮箱下拉自动填充选择示例代码附图
Apr 03 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
Dec 01 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
Mar 24 Javascript
layui select获取自定义属性方法
Aug 15 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
Jun 17 Javascript
超轻量级的js时间库miment使用解析
Aug 02 Javascript
js对象简介与基本用法示例
Mar 13 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
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
jquery操作select大全
2014/04/25 Javascript
Jquery节点遍历next与nextAll方法使用示例
2014/07/22 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
让 python 命令行也可以自动补全
2014/11/30 Python
举例讲解Python中的算数运算符的用法
2015/05/13 Python
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
Python单元测试简单示例
2018/07/03 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
2019/04/18 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
水利学院求职自荐书
2014/02/01 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
二人合伙经营协议书
2014/09/13 职场文书
趣味运动会开幕词
2015/01/28 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS
pandas提升计算效率的一些方法汇总
2021/05/30 Python
电频谱管理的原则是什么
2022/02/18 无线电