我正在创建一个多步骤用户注册,每一步完成后,服务器会返回下一个表单的HTML字符串。在每个步骤中,我将此HTML设置为使用CompileService动态创建的表单组件的模板。这很有效并且表单看起来不错,但是我无法向动态创建的表单添加任何服务,而且我不断遇到像“Cannot resolve all parameters”这样的问题。
以下是我的CompileService:
我希望编辑这个服务,使其不仅可以即时创建组件,还可以将服务注入到该组件中。我该如何做到这一点?
以下是我的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, []);
});
}
}
我希望编辑这个服务,使其不仅可以即时创建组件,还可以将服务注入到该组件中。我该如何做到这一点?
private resolver: ComponentResolver
前面添加@Inject(ComponentResolver)
。如果你没有转译你的代码,编译器就不知道在哪里寻找ComponentResolver
实例。 - Alex Florin