【问题标题】:Angular 2 inject service into dynamic componentAngular 2将服务注入动态组件
【发布时间】:2017-11-10 00:29:26
【问题描述】:

我正在创建一个多步骤用户注册,在每个步骤之后,服务器返回下一个要完成的表单的 HTML 字符串。在每一步,我都将该 HTML 设置为使用 CompileService 动态创建的表单组件的模板。这工作正常,表单看起来不错,但我无法向动态创建的表单添加任何服务,我不断遇到类似

的问题

"Cannot resolve all parameters"

这是我的编译服务

import { Component, ComponentMetadata, ComponentResolver, Injectable, ReflectiveInjector, ViewContainerRef } from '@angular/core';

@Injectable()
export class CompileService {
constructor(private resolver: ComponentResolver) {}

createComponent(metadata: ComponentMetadata, vcRef: ViewContainerRef) {
        let cmpClass = class DynamicComponent {};

        let decoratedCmp = Component(metadata)(cmpClass);
        this.resolver.resolveComponent(decoratedCmp).then(factory => {
        let injector = ReflectiveInjector.fromResolvedProviders(providers, vcRef.parentInjector);
            vcRef.createComponent(factory, 0, injector, []);
        });
    }
}

我希望编辑此服务,使其不仅可以即时创建组件,还可以将服务注入该组件。我该怎么做?

【问题讨论】:

  • 我也有这个问题.. :(
  • 我知道这有点晚了,但是您可以尝试在构造函数中的 private resolver: ComponentResolver 之前添加 @Inject(ComponentResolver)。如果您不转译代码,编译器不知道在哪里寻找 ComponentResolver 实例。

标签: angular


【解决方案1】:

看看这行代码,请解释一下providers参数是什么...

let injector = ReflectiveInjector.fromResolvedProviders(providers, vcRef.parentInjector);

我不知道它是什么,也不知道它来自哪里。在这种情况下,我会告诉你......

“无法解析所有参数”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-25
    • 2017-08-24
    • 2020-01-06
    • 2018-08-22
    • 2018-05-20
    • 2017-05-20
    • 1970-01-01
    • 2016-06-10
    相关资源
    最近更新 更多