Angular 2将服务注入动态组件

5
我正在创建一个多步骤用户注册,每一步完成后,服务器会返回下一个表单的HTML字符串。在每个步骤中,我将此HTML设置为使用CompileService动态创建的表单组件的模板。这很有效并且表单看起来不错,但是我无法向动态创建的表单添加任何服务,而且我不断遇到像“Cannot resolve all parameters”这样的问题。
以下是我的CompileService:
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, []);
        });
    }
}

我希望编辑这个服务,使其不仅可以即时创建组件,还可以将服务注入到该组件中。我该如何做到这一点?

我也有这个问题.. :( - Mostafa Lavaei
我知道这有点晚了,但你可以尝试在构造函数中的 private resolver: ComponentResolver 前面添加 @Inject(ComponentResolver)。如果你没有转译你的代码,编译器就不知道在哪里寻找 ComponentResolver 实例。 - Alex Florin
1个回答

1

请看这行代码并解释providers参数是什么...

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

我无法确定它是什么或来自哪里。在这种情况下,我会告诉你...

"无法解析所有参数"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接