迁移到Angular2:如何使用注入的AngularJS依赖项

时间:2017-06-09 15:29:40

标签: angularjs angular migration

在构造函数外部迁移到Angular2期间,我应该如何使用AngularJS依赖项?我正在使用升级模块,服务尚未升级。

2 个答案:

答案 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)