【发布时间】: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