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
Angular 使用ngComponentOutlet创建动态组件的依赖项注入问题_Angular_Angular7 - Fatal编程技术网

Angular 使用ngComponentOutlet创建动态组件的依赖项注入问题

Angular 使用ngComponentOutlet创建动态组件的依赖项注入问题,angular,angular7,Angular,Angular7,项目需要使用ngComponentOutlet指令动态创建组件。动态组件将通过将数据注入构造函数来接收数据。那么,如何在构造函数中作为参数传递这些数据呢 我已经创建了一个示例,链接是 项目结构为: HomeComponent—起点 LoadComponents模块-一个延迟加载的模块,包含2个组件 (i) LoadComponents-路由“/load”的默认值 (ii)组件1组件-将从LoadComponents创建的动态组件 LoadComponents具有以下创建代码: 内容模型-需要

项目需要使用ngComponentOutlet指令动态创建组件。动态组件将通过将数据注入构造函数来接收数据。那么,如何在构造函数中作为参数传递这些数据呢

我已经创建了一个示例,链接是

项目结构为:

  • HomeComponent—起点

  • LoadComponents模块-一个延迟加载的模块,包含2个组件

    (i) LoadComponents-路由“/load”的默认值

    (ii)组件1组件-将从LoadComponents创建的动态组件

  • LoadComponents具有以下创建代码:

  • 内容模型-需要注入组件1组件中的模型
  • 如果我删除了注入代码,那么应用程序将正常工作,否则将显示错误:

    Error: StaticInjectorError(AppModule)[Component1Component -> Content]
    

    目前,我已经通过使用插件“ng dynamic component”解决了项目问题,它的工作方式很有魅力。但我必须应用Angular的ngComponentOutlet指令。

    您正在向组件注入
    内容,因此它应该是可注入的:

    @Injectable({
      providedIn: 'root',
    })
    export class Content {
        @Input() public Code: string;
        @Input() public HTML: string;
    }
    
    您的固定


    注意:在你的问题中总是包含令人不安的代码

    您正在向组件注入
    内容
    ,因此它应该是可注入的:

    @Injectable({
      providedIn: 'root',
    })
    export class Content {
        @Input() public Code: string;
        @Input() public HTML: string;
    }
    
    您的固定


    注意:在你的问题中总是包含令人不安的代码

    服务和组件在角度上有不同的用途

    服务是一个广泛的类别,包含任何价值、功能或价值 应用程序需要的功能。服务通常是具有 狭隘、明确的目的。它应该做一些具体的事情 这很好

    Angular将组件与服务区分开来,以增加模块化 和可重用性。通过分离组件的相关视图 从其他类型的处理功能,您可以 组件类精简高效

    由于您在content.module.ts内使用的是可注入装饰器,因此不应使用 @输入装饰器。然后不要用新的关键字初始化对象。使用new关键字实例化对象用于创建不可注入的对象。 参考:

    content.model.ts

    import { Injectable } from '@angular/core';    
    @Injectable({
      providedIn: 'root',
    })
    export class Content {
       Code: string ;
       HTML: string;
    }
    

    示例:

    服务和组件在角度上的用途不同

    服务是一个广泛的类别,包含任何价值、功能或价值 应用程序需要的功能。服务通常是具有 狭隘、明确的目的。它应该做一些具体的事情 这很好

    Angular将组件与服务区分开来,以增加模块化 和可重用性。通过分离组件的相关视图 从其他类型的处理功能,您可以 组件类精简高效

    由于您在content.module.ts内使用的是可注入装饰器,因此不应使用 @输入装饰器。然后不要用新的关键字初始化对象。使用new关键字实例化对象用于创建不可注入的对象。 参考:

    content.model.ts

    import { Injectable } from '@angular/core';    
    @Injectable({
      providedIn: 'root',
    })
    export class Content {
       Code: string ;
       HTML: string;
    }
    

    示例:

    您可以共享stackblitz编辑链接吗?对不起。这是你能分享stackblitz编辑链接吗?对不起。在这里它解决了这个问题,但是当我从LoadComponent注入数据时,Component1并没有显示数据,只是显示了一个空白对象。我知道它将注入一个新的内容实例,但我希望它的属性从LoadComponent填充。它解决了问题,但当我从LoadComponent注入数据时,Component1没有显示数据,只是显示一个空白对象。我知道它将注入一个新的内容实例,但我希望它的属性是从LoadComponet填充的。谢谢,这个问题已经解决了。我将内容模型注入另一个组件,然后它显示空白对象。我希望以前的值会保留在这个模型对象中,因为DI使用Singleton!!!你注射了哪种成分?我在本地回购中试过。我的问题是,我在错误的模块中添加了组件。在LoadComponents模块中添加组件后,实际上注入的模型对所有人都是相同的。如果您试图使用延迟加载在应用程序之间共享单例,请检查此项:谢谢,这已得到解决。我将内容模型注入另一个组件,然后它显示空白对象。我希望以前的值会保留在这个模型对象中,因为DI使用Singleton!!!你注射了哪种成分?我在本地回购中试过。我的问题是,我在错误的模块中添加了组件。在LoadComponents模块中添加组件后,注入的模型确实与所有组件相同。如果您试图使用延迟加载在应用程序之间共享单例,请检查此项: