我正在尝试托管一个简单的混合应用程序(AngularJS+Angular 7(。我能够根据指导原则设置基本模块和引导两个模块。我能够建立从AngularJS到Angular的通信。
我遵循了在Angular模块中注入AngularJS服务的指导原则(https://angular.io/guide/upgrade(。然而,我发现我遇到的一些问题可能是我正在努力理解的基本设置。
这是真正的问题,当我试图从Angular调用AngularJS服务时,它在运行时失败,说明AngularJS中注入的依赖项是未定义的。例如:未定义$http。
我的问题是,我需要通过Angular模块中的提供者来注入这种依赖关系吗?我有一个提供者,它将服务本身注入Angular模块。指导方针或标准方面的任何帮助都会有所帮助。
这是我的AngularJS服务的格式。目前,我正在将其修改为类,并尝试从Angular 调用
function GetUsers( $http, OtherDependency) {
return {
getUsers: getUsers
}
function getUsers(userID, key, phrase) {
//$http is used inside this method
}
在angular中,我通过一个提供者注入这个服务,并试图通过其构造函数进行实例化来使用这个服务
由于您的stackbliz演示不可运行,因此在我的项目中,我只创建了一个Angular SharedModule,并将angularjs服务注入如下提供商:
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
export function getToastrService($injector: any) {
return $injector.get('toastr');
}
export function getLoadingService($injector: any) {
return $injector.get('loadingService');
}
@NgModule({
imports: [
CommonModule
],
exports: [
NgxComponentsModule
],
providers: [
{ provide: 'toastr', deps: ['$injector'], useFactory: getToastrService },
{ provide: 'loadingService', deps: ['$injector'], useFactory: getLoadingService }
]
})
export class NgxSharedModule { }
然后在我的Angular业务模块中,导入SharedModule,然后只需要在构造函数中使用DI:
constructor(@Inject('toastr') public toastr: any,
private notifyService: NotifyService) { }
希望对你有用。