Angular4动态创建组件--根据组件名称动态创建出来组件
2017-08-07 23:52
501 查看
动态创建组件
说说场景先,比我写了一些组件,这此组件内容都很少,弹出的对话框也许只有一行数据,也有可能是一个表单等,或都一些多选的,单选的选项等。网上有好多,动态创建组件的Demo,都不是很满意,愿意就是要动态创建组件的时候,传入的你即将要创建的组件对象进去,然后把这个放到页面里显示出来。这算什么动态创建呀,我就想传一个组件的名字,然后就能把他创建出来。
之前写过C#动态创建类,都是给一个类的名称,然后通过反射将类创建出来,然后能过接口过滤转成接口调用方法或, invoke 某个方法等进行操作。像这种才是我想要的效果。
给个名称,然后就把这个组件创建出来,通过输入一些参数对创建出来的组件进行赋值,输出一些参数(主就输出是事件了,比较点击组件上的按钮触发相应的事件等)。
说了这么多,先来个例子吧。
上面那张图很简单就是一个输入文本的一个弹框。
下面这个就有点复杂了,有数据传入,事件绑定等
主了调用起来方便,我把这些都封装成了一个方法:三个参数
要创建的组件名称
要传入组件的参数
组件输出的事件
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 {} .... }
就不把代码张贴里了,查看全部代码可以点击这里展示出几个方法吧,具体详情可能点击
相关文章推荐
- Angular 4根据组件名称动态创建出组件的方法教程
- 根据窗体名称动态创建窗体
- 根据窗口类名称动态创建窗口
- 使用反射实现根据名称动态创建窗体的几种方法
- angular4系列之动态创建组件
- 使用反射实现根据名称动态创建窗体的几种方法。
- 使用反射实现根据名称动态创建窗体的几种方法。
- C# 使用反射实现根据名称动态创建窗体的几种方法
- C# 中反射获取某类的子类和根据类型名动态创建对象(转载)
- NG4-详解Angular 4.x 动态创建组件
- C#如何根据字符串动态的创建对象(类)?
- SQLServer获得所有用户存储过程、根据存储过程名称获得内容、获得数据库对象创建脚本
- .NET : 如何动态根据一个业务实体类型创建XSD架构文件
- SQL对某张表建立触发器,然后根据编码与名称,跨服务器动态建表与生成数据
- FLEX如何动态创建DataGrid组件详解
- C# 根据类名称创建类示例
- 动态根据文件创建类,并纳入spring管理
- C# 动态创建出来的窗体间的通讯 delegate2
- VC如何动态创建picture组件,按坐标创建在视图上,并且可以加入位图(从资源中加也可以)!
- flex DataGrid根据数据动态显示行颜色(重写DataGrid组件)