将 angularjs 服务注入 Angular

Posted

技术标签:

【中文标题】将 angularjs 服务注入 Angular【英文标题】:Inject angularjs service into Angular 【发布时间】:2016-12-09 03:57:45 【问题描述】:

我正在尝试将$log 服务用于角度 2,根据我阅读的内容,您需要以下步骤:

    创建一个包含您要注入的服务的模块。 调用 UpgradeAdapter 的 upgradeNg1Provider 方法。

所以,我做了以下

  var initInjector = angular.injector(['ng']);
  var $log = initInjector.get('$log');
  angular.module('Services1', [])
    .service('$log', [$log]);
  upgradeAdapter.upgradeNg1Provider('$log');

然后我创建一个 angular 2 组件,如下所示

    @Component(   selector: "ion-app",   template:"<p>Test</p>" )
    @Injectable()
    export class HelloIonicPage 
      message: string;
      constructor( @Inject('$log') $log) 
        this.message = "Hi";
      
    

但是当我运行应用程序时,它给了我以下错误:

原始异常:$log 没有提供程序!

另外,我尝试使用upgradeAdapter bootstrap

  upgradeAdapter.bootstrap(document.documentElement, ['Services1'])

但这也不起作用。 请注意,我使用的是 Ionic 2 框架,上面的代码是写在里面的

    this.platform.ready().then(() =>  
            //The code is going here
);

【问题讨论】:

似乎是一个类似的问题。看看这个,你可能想使用绑定或提供者***.com/a/32298993/1403009 @NaveenAechan 这个答案似乎没有帮助,因为它假设您有权访问 Angular 2 提供程序对象。 UpgradeAdapter.upgradeNg1Provider 不返回任何内容。 如果您指的是 Angular 2+,请仅指“Angular” 【参考方案1】:

您需要将服务注册为提供者。以下是我将 angular1 $state 注入到 angular 2 应用程序的方法:

@NgModule(
  providers: [
    
       provide: '$state', 
       useFactory: ($injector: any) => $injector.get('$state'), 
       deps: ['$injector']
    
  ]
)

然后代替注入:

@Injectable()
export class RestService 
  constructor(@Inject('$state') $state: any) 
    $state.go('...');
  

【讨论】:

$injector is undefined 这适用于我使用 AngularJS 1.4.7 服务和 Angular 7.2.0

以上是关于将 angularjs 服务注入 Angular的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS $在服务注入中注入错误

AngularJS 和 Typescript - 注入其他服务的服务未定义

将 D3 注入 AngularJS 的正确约定

将 AngularJS 对象作为 TypeScript 类注入(缺少方法)

2.3了解AngularJS模块和依赖注入

在AngularJs的服务中注入dateFilter