【发布时间】:2017-08-25 05:31:18
【问题描述】:
不久前,我们开始创建包含 Angular 组件的内部 NPM 包,以便我们可以在不同站点之间重用我们常用的 Angular 组件。通过我们正在进行的一些新工作,我们正在尝试支持 AOT 编译以及使 NPM 包中的组件与 angular 2.x 和 4.x 兼容。我们有一些配置需要传递到 npm 包/库(api 键/url、环境等),所以我希望实现站点提供一个配置对象,可以将其注入需要这些值的组件中.我在让提供商与 AOT 合作时遇到问题。到目前为止,我能够让它工作的唯一方法是使用显式字符串标记,但这在我看来远非理想。
工作:
在消费 AOT 站点中:
import { environment } from './../environments/environment';
@NgModule({
declarations: [
...
],
imports: [
...
],
providers: [
{
provide: 'ConfigToken',
useValue: environment
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
在库组件中:
constructor(@Inject('ConfigToken') private config: Configuration) { }
从库中导出的接口:
export interface Configuration {
someValue: string;
someOtherValue: string;
}
我试过了:
-
从库中导出
OpaqueToken -
导出一个类以用作标记
使用这两种策略,我最终都会遇到错误
ERROR in Can't resolve all parameters for SomeComponent in C:/Development/path/to/bundle
【问题讨论】:
标签: angular angular2-aot