使用来自共享 Angular 2 库的提供程序导致异常:必须定义令牌
Using a provider from a shared Angular 2 library causes exception: token must be defined
我正在为 Angular 2 个项目创建一个共享库。
我可以将 classes 和 UI 组件添加到库中并在另一个项目中使用它们而不会出现问题。
但是,当我创建服务提供者时,我不确定如何注入例如 http 依赖项。
我制作了一个演示共享库 here 来提供我正在做的事情的示例。
这个 lib linked(通过 npm link)到 another project(一个 Ionic 2 启动项目)。
我在 Socius 共享库中创建了一个示例 class 来对 Wikidata 进行 http 调用。
我将从常规项目中使用的提供程序 class 的普通构造函数如下所示:
@Injectable()
export class Wikidata {
constructor(public http: Http)
以这种方式使用它会产生运行时错误:
无法解析 TutorialPage 的所有参数:(NavController、MenuController、TranslateService、?)。
我还看到了一些使用这种语法的例子:
constructor(@Inject(Http) public http: Http) {
这将产生相同的运行时错误。
根据对 的回答,我尝试了这个:
private wikidata: Wikidata;
constructor(injector:Injector) {
setTimeout(() => this.wikidata = injector.get(Wikidata));
}
使用此方法会导致新错误:
EXCEPTION: Token must be defined!
使用具有此类依赖关系的 class 的正确方法是什么?
不确定如何正确回答这个问题:)
我所知道的是,服务不需要在模块中导入导出。只需将它们添加到库模块的提供程序并将其作为整个模块导入到 'imports' 语句中。之后,无论何时你需要注入它,你仍然需要直接找到这个可注入维基数据的来源,将它导入文件中,这应该可以工作。
我正在为 Angular 2 个项目创建一个共享库。 我可以将 classes 和 UI 组件添加到库中并在另一个项目中使用它们而不会出现问题。 但是,当我创建服务提供者时,我不确定如何注入例如 http 依赖项。
我制作了一个演示共享库 here 来提供我正在做的事情的示例。 这个 lib linked(通过 npm link)到 another project(一个 Ionic 2 启动项目)。
我在 Socius 共享库中创建了一个示例 class 来对 Wikidata 进行 http 调用。 我将从常规项目中使用的提供程序 class 的普通构造函数如下所示:
@Injectable()
export class Wikidata {
constructor(public http: Http)
以这种方式使用它会产生运行时错误: 无法解析 TutorialPage 的所有参数:(NavController、MenuController、TranslateService、?)。
我还看到了一些使用这种语法的例子:
constructor(@Inject(Http) public http: Http) {
这将产生相同的运行时错误。
根据对
private wikidata: Wikidata;
constructor(injector:Injector) {
setTimeout(() => this.wikidata = injector.get(Wikidata));
}
使用此方法会导致新错误:
EXCEPTION: Token must be defined!
使用具有此类依赖关系的 class 的正确方法是什么?
不确定如何正确回答这个问题:) 我所知道的是,服务不需要在模块中导入导出。只需将它们添加到库模块的提供程序并将其作为整个模块导入到 'imports' 语句中。之后,无论何时你需要注入它,你仍然需要直接找到这个可注入维基数据的来源,将它导入文件中,这应该可以工作。