视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Angular 4根据组件名称动态创建出组件的方法教程
2020-11-27 22:26:34 责编:小采
文档

一、理解angular组件

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

应用组件的优点:

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

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

  • 说说场景先,比我写了一些组件,这此组件内容都很少,弹出的对话框也许只有一行数据,也有可能是一个表单等,或都一些多选的,单选的选项等。
  • 网上有好多,动态创建组件的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 {}
     ....
    }

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

    总结

    下载本文
    显示全文
    专题