案子
我正在将 AngularJS(即 Angular 1.6)应用程序升级到 Angular(即 Angular 4.1.3)。我选择进行增量升级,因此目前 AngularJS 和 Angular 都已引导并运行。到目前为止一切都很好,但是:应该重写为 Angular 的 AngularJS 服务之一依赖于一个众所周知的服务$translate
,该服务是第 3 方 AngularJS(阅读 Angular 1)模块pascalprecht.translate的一部分。换句话说,$translate
注入的服务MyService
应该成为 Angular(阅读 Angular 4)服务。
MyService
(精简)看起来像这样:
import { Injectable } from '@angular/core';
@Injectable()
export class MyService {
// Here comes the injection (how to do it?).
constructor(private $translate: $translate) {
}
foo() {
// Use the service
this.$translate('HELLO_WORLD');
}
}
它位于MyModule
:
import { NgModule } from '@angular/core';
import { MyService } from './my.service';
@NgModule({
providers: [
MyService
]
})
export class MyModule {
}
问题
现在,当我是第 3 方 AngularJS 模块的一部分时,如何注入$translate
到Angular 模块中?MyService
MyService
$translate
如果 AngularJS 服务位于同一个模块中(或者至少该模块是我自己的解决方案的一部分),我知道如何将 AngularJS 服务注入到 Angular 服务中。官方文档中对此进行了解释。有没有办法处理第三方服务?我需要在MyModule
的提供者中注册该服务吗?
import { NgModule } from '@angular/core';
import { MyService } from './my.service';
// How this line should look line then?
import { $translate } from 'node_modules/angular-translate/...';
@NgModule({
providers: [
MyService,
$translate
]
})
export class MyModule {
}
还是我试图实现不可能?