【发布时间】:2017-07-21 18:21:05
【问题描述】:
是否可以仅通过名称来手动解析组件?
我有一个包含组件名称的字符串变量,比如“UserService”
我需要能够解决这种类型,我查看了Injctor,从文档中可以看到有一个resolve() 和resolveAndCreate() (https://angular.io/docs/ts/latest/api/core/Injector-class.html)
但我没有类型。
谢谢
史蒂夫
编辑:尝试了以下方法:
System.import("path/to/service").then(p=>{
var injector = Injector.resolveAndCreate([p[this.serviceName]]);//works
var serviceInstance = injector.get(p[this.serviceName]); //Fails with "No provider for Http! (UserService -> Http)".
});
我有 Http 可用,它是在引导期间提供的,这适用于应用程序的其他部分。
bootstrap(AppComponent, [
ROUTER_PROVIDERS, Http, HTTP_PROVIDERS, UrlBuilderService,
provide(LocationStrategy, { useClass: HashLocationStrategy }),
provide('notification', { useClass: NotificationService })
]);
有什么想法吗?
进一步编辑:
我现在这样称呼resolveAndCreate:
var injector = Injector.resolveAndCreate([p[this.serviceName], Http]);
失败了
没有 ConnectionBackend 的提供者! (用户服务-> Http-> 连接后端)
所以我这样称呼它:
var injector = Injector.resolveAndCreate([p[this.serviceName], Http, ConnectionBackend]);
由于其他一些缺失的东西而失败。
改成这个
var injector = Injector.resolveAndCreate([p[this.serviceName], HTTP_PROVIDERS]);
现在一切正常。
我不明白为什么它不能自动解析这些组件,因为我在引导期间提供了它们。
【问题讨论】:
标签: typescript angular systemjs