Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将组件动态插入html_Html_Angular_Angular Material - Fatal编程技术网

将组件动态插入html

将组件动态插入html,html,angular,angular-material,Html,Angular,Angular Material,我试图在一段html中动态插入一个角度材质组件。按照我的想法,我将无法使用 以下是它的工作原理: 我将从数据库中检索一个字符串(它可以是任何材质组件,如输入、按钮等…类似于以下内容: let stringFromDB = "<md-spinner></md-spinner>" 让stringFromDB=“” 我需要将此字符串传递给我的html的div(这是我的“容器”)。因此我尝试: @Component({ selector: 'report',

我试图在一段html中动态插入一个角度材质组件。按照我的想法,我将无法使用

以下是它的工作原理:

我将从数据库中检索一个字符串(它可以是任何材质组件,如输入、按钮等…类似于以下内容:

let stringFromDB = "<md-spinner></md-spinner>"
让stringFromDB=“”
我需要将此字符串传递给我的html的div(这是我的“容器”)。因此我尝试:

@Component({
    selector: 'report',
    template: `<div [innerHtml]="stringFromDB"></div>`
})
export class ReportComponent{
    stringFromDB : string = null;

    constructor(){  
        this.stringFromDB =this.someService.getTemplateStringFromDatabase();
    }
}
@组件({
选择器:“报告”,
模板:``
})
导出类ReportComponent{
stringFromDB:string=null;
构造函数(){
this.stringFromDB=this.someService.getTemplateStringFromDatabase();
}
}
我可以传递一个简单的


但不是像md spinner这样的组件。关于如何实现这一点,您有什么想法吗?

在angular 4中,您可以使用ngComponentOutlet

模板:

<ng-container *ngComponentOutlet="dynamicComponent; ngModuleFactory: dynamicModule;"></ng-container>

使用模板字符串生成动态模块和组件:

import { Compiler } from '@angular/core';

build() {
    this.dynamicComponent = this.createDynamicComponent(this.stringFromDB);
    this.dynamicModule = this._compiler.compileModuleSync(this.createDynamicModule(this.dynamicComponent));
}

createDynamicModule(componentType: any) {
    @NgModule({
        imports: [ ],
        declarations: [
            componentType
        ],
        entryComponents: [componentType]
    })
    class RuntimeModule { }
    return RuntimeModule;
}

createDynamicComponent(template: string) {
    @Component({
        selector: 'dynamic-component',
        template: template ? template : '<div></div>'
    })
    class DynamicComponent {
        constructor() {
        }
    }
    return DynamicComponent;
}
从'@angular/core'导入{Compiler};
构建(){
this.dynamicComponent=this.createDynamicComponent(this.stringFromDB);
this.dynamicModule=this.\u compiler.compileModuleSync(this.createDynamicModule(this.dynamicComponent));
}
createDynamicModule(组件类型:任意){
@NGD模块({
进口:[],
声明:[
组件类型
],
entryComponents:[组件类型]
})
类运行时模块{}
返回运行时模块;
}
createDynamicComponent(模板:字符串){
@组成部分({
选择器:“动态组件”,
模板:模板?模板:“”
})
类DynamicComponent{
构造函数(){
}
}
返回DynamicComponent;
}

我认为您需要编译它们,因为这是一个自定义组件