Angular4动态创建组件--根据组件名称动态创建出来组件

转载: Angular4动态创建组件--根据组件名称动态创建出来组件

动态创建组件

  • 说说场景先,比我写了一些组件,这此组件内容都很少,弹出的对话框也许只有一行数据,也有可能是一个表单等,或都一些多选的,单选的选项等。

  • 网上有好多,动态创建组件的Demo,都不是很满意,愿意就是要动态创建组件的时候,传入的你即将要创建的组件对象进去,然后把这个放到页面里显示出来。这算什么动态创建呀,我就想传一个组件的名字,然后就能把他创建出来。

  • 之前写过C#动态创建类,都是给一个类的名称,然后通过反射将类创建出来,然后能过接口过滤转成接口调用方法或, invoke 某个方法等进行操作。像这种才是我想要的效果。

  • 给个名称,然后就把这个组件创建出来,通过输入一些参数对创建出来的组件进行赋值,输出一些参数(主就输出是事件了,比较点击组件上的按钮触发相应的事件等)。

说了这么多,先来个例子吧。 
这里写图片描述 
上面那张图很简单就是一个输入文本的一个弹框。

下面这个就有点复杂了,有数据传入,事件绑定等 
这里写图片描述

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

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

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

创建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 {}
   ....
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章