一、主页面:

app.component.html:

  <button (click)="load();">动态</button>
2<div #domRoom><!--动态组件加载到这个div里--></div>

app.component.ts:

 import {Component, ViewContainerRef, ViewChild, ComponentFactoryResolver} from '@angular/core';
import {DynamicdialogComponent} from "./dynamicdialog/dynamicdialog.component"; @Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent { @ViewChild('domRoom', {read: ViewContainerRef}) domRoom: ViewContainerRef; constructor(public cfr: ComponentFactoryResolver,){} load(){
let com = this.cfr.resolveComponentFactory(DynamicdialogComponent);
let comref = this.domRoom.createComponent(com);
let data = [];
comref.instance.sourseData = data; //创建动态组件传输数据
comref.instance.myWorkOver.subscribe((msg) => { // 订阅组件传出事件 判断执行销毁组件操作
if (msg) {
this.domRoom.clear();
}
});
}
}

二、动态组件:

dynamicdialog.component.html:

 <p-dialog header="动态组件" [(visible)]="display" modal="modal" width="850" [responsive]="true" (onHide)="dialogHide()">
666
</p-dialog>

dynamicdialog.component.ts:

 import {Component, OnInit, Input, Output, EventEmitter} from '@angular/core';

 @Component({
selector: 'app-dynamicdialog',
templateUrl: './dynamicdialog.component.html',
styleUrls: ['./dynamicdialog.component.css']
})
export class DynamicdialogComponent implements OnInit { @Input() sourseData: any; // 外部传入的数据源
@Output() myWorkOver: EventEmitter<boolean> = new EventEmitter<boolean>(); // 用于向外传事件(根据实际业务,也可以改为EventEmitter<any>)
public display: boolean = true; // 默认显示dialog constructor() { } ngOnInit() {
} dialogHide() { // dialog hide调用 默认认为当dialog 关闭了 就销毁组件 实际业务按需求综合考虑
this.myWorkOver.emit(true); // 向外传播事件 并将消息体传播出去
} }

app.module.ts:

 import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { DataTableModule } from 'primengcn/primeng';
import { AppRoutingModule } from './app-routing.module';
import {DialogModule} from 'primengcn/components/dialog/dialog';
import { AppComponent } from './app.component';
import { DynamicdialogComponent } from './dynamicdialog/dynamicdialog.component';
import {BrowserAnimationsModule} from "@angular/platform-browser/animations"; @NgModule({
declarations: [
AppComponent,
DynamicdialogComponent
],
imports: [
BrowserModule,
AppRoutingModule,
DialogModule,
DataTableModule,
BrowserAnimationsModule
],
entryComponents: [
DynamicdialogComponent
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }

Angular动态组件的更多相关文章

  1. Angular 动态组件

    Angular 动态组件 实现步骤 Directive HostComponent 动态组件 AdService 配置AppModule 需要了解的概念 Directive 我们需要一个Directi ...

  2. angular 动态组件类型

    出处:https://github.com/Penggggg/angular-component-practices 组件类型1:纯函数功能,而没有视图部分,即Factory(类似于$http) pr ...

  3. Angular 学习笔记 (动态组件 & Material Overlay & Dialog 分析)

    更新: 2019-11-24  dialog vs router link refer : https://stackoverflow.com/questions/51821766/angular-m ...

  4. Angular动态创建组件之Portals

    这篇文章主要介绍使用Angular api 和 CDK Portals两种方式实现动态创建组件,另外还会讲一些跟它相关的知识点,如:Angular多级依赖注入.ViewContainerRef,Por ...

  5. angular2 学习笔记 ( Dynamic Component 动态组件)

    更新 2018-02-07 详细讲一下 TemplateRef 和 ViewContainerRef 的插入 refer : https://segmentfault.com/a/1190000008 ...

  6. vuejs动态组件给子组件传递数据

    vuejs动态组件给子组件传递数据 通过子组件定义时候的props可以支持父组件给子组件传递数据,这些定义的props在子组件的标签中使用绑定属性即可,但是如果使用的是<component> ...

  7. C++ 类的动态组件化技术

    序言: N年前,我们曾在软件开发上出现了这样的困惑,用VC开发COM组件过于复杂,用VB开发COM组件发现效率低,而且不能实现面向对象的很多特性,例如,继承,多态等.更况且如何快速封装利用历史遗留的大 ...

  8. Hibernate学习---第五节:普通组件和动态组件

    一.普通组件映射配置 1.创建组件类,代码如下: package learn.hibernate.bean; /** * 组件类 */ public class Phones { private St ...

  9. vue2入坑随记(二) -- 自定义动态组件

    学习了Vue全家桶和一些UI基本够用了,但是用元素的方式使用组件还是不够灵活,比如我们需要通过js代码直接调用组件,而不是每次在页面上通过属性去控制组件的表现.下面讲一下如何定义动态组件. Vue.e ...

随机推荐

  1. Luogu3214 HNOI2011 卡农 组合、DP

    传送门 火题qwq 我们需要求的是满足元素个数为\(M\).元素取值范围为\([1,2^n-1]\).元素异或和为\(0\)的集合的数量. 首先我们可以计算元素有序的方案数(即计算满足这些条件的序列的 ...

  2. 获取SpringMVC中所有RequestMapping映射URL信息

    SpringMVC启动的时候,会把接口信息收集在RequestMappingHandlerMapping中,故可以通过这个类,拿到全部的映射信息,Sample代码段如下: @Autowired pri ...

  3. 尚硅谷MySQL基础学习笔记

    目录 写在前面 MySQL引入 数据库的好处 数据库的相关概念 数据库存储数据的特点 MySQL服务的启动和停止 MySQL服务端的登录和退出 MySQL的常用命令 MySQL语法规范 DQL(Dat ...

  4. Python学习日记(二十三) 类命名空间和组合

    类命名空间 在一个类中它的函数(方法)属于动态属性,直接定义的变量属于静态属性 首先先定义一个类,并在这个类里面加入静态变量.属性等然后将一个对象实例化 class Fighter: #定义一个战机的 ...

  5. centos7 编译安装redis

    1.下载redis源码包 cd /opt wget http://download.redis.io/releases/redis-4.0.12.tar.gz 2.解压源码包 tar zxf redi ...

  6. 使用Arduino开发板制作交流电压表

    在本文中,我们将使用Arduino开发板制作一个交流电压测量装置,测量我们家中交流电源的电压.我们将在Arduino IDE的串行监视器上打印输出该电压,并在万用表上显示出来. 制作数字电压表比模拟电 ...

  7. virtual box 6.0 扩容原有磁盘空间 ubuntu18.04

    virtual box 6.0 扩容原有磁盘空间 ubuntu18.04 1虚拟介质管理 1.1点击菜单 1.2 修改磁罗容量大小(需要关闭虚拟机),点击应用 2使用ubuntu安装镜像将新加容量添加 ...

  8. P1072 Hankson 的趣味题[数论]

    题目描述 Hanks 博士是 BT(Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲解了 ...

  9. discuz论坛门户资讯入库接口【原创】

    最近想打造一个社区门户站点,所以写了这个入库接口,可以对接数据入库. <?php /* * Discuz x3.2 门户免登陆发布接口 * 2018-08-10 * Copyright 68xi ...

  10. 区别和认识.net四个判等方法

    概要 本方介绍.net如何判断两个对象是否相等 .Net有四个判等函数 1)Object.ReferenceEquals 2)Object.Equals 3)对象实例的Equals 4)==操作符 这 ...