在构造函数外部迁移到Angular2期间,我应该如何使用AngularJS依赖项?我正在使用升级模块,服务尚未升级。
答案 0 :(得分:4)
所以答案是部分Making AngularJS Dependencies Injectable to Angular,但没有证明如何在构造函数之外使它可用。
以下是$ log angularJS服务的示例。
创建 ajs-upgraded-providers.ts ,我们在其中声明提供商:
/**
* $log upgraded provider
*/
export abstract class Log {
[key: string]: any;
}
export function logFactory(i: any) {
return i.get('$log');
}
export const logProvider = {
provide: Log,
useFactory: logFactory,
deps: ['$injector']
};
导入 app.module.ts 声明的提供商:
import { logProvider } from './ajs-upgraded-providers';
@NgModule({
imports: [
//imports
],
providers: [
//Providers & Services
//Upgraded angularJS providers
logProvider
]
})
example.service.ts 如何在迁移过程中使用angularJS服务:
import { Log } from '../ajs-upgraded-providers'; //edit path accordingly
@Injectable()
export class ExampleService {
constructor(private $log: Log) {}
exampleFunction() {
this.$log.info("Info to be logged");
}
}
答案 1 :(得分:1)
使AngularJS依赖项可注入Angular
在运行混合应用程序时,我们可能遇到需要将一些AngularJS依赖项注入Angular代码的情况。这可能是因为我们在AngularJS服务中仍有一些业务逻辑,或者因为我们需要一些AngularJS的内置服务,如
$location
或$timeout
。在这些情况下,可以将AngularJS提供程序升级为Angular。这使得它可以在Angular代码中的某处注入它。例如,我们可能在AngularJS中有一个名为
HeroesService
的服务:import { Hero } from '../hero'; export class HeroesService { get() { return [ new Hero(1, 'Windstorm'), new Hero(2, 'Spiderman') ]; } }
我们可以使用从AngularJS
$injector
请求服务的Angular Factory provider升级服务。我们建议在单独的
ajs-upgraded-providers.ts
文件中声明Factory Provider,以便它们全部在一起,从而更容易引用它们,创建新的并在升级结束后删除它们。还建议导出
heroesServiceFactory
函数,以便Ahead-of-Time编译可以获取它。— Angular Developer Guide - Upgrading (Making AngularJS Dependencies Injectable)