【问题标题】:how do you inject a non-typescript angular service into a typescript class?如何将非打字稿角度服务注入打字稿类?
【发布时间】:2023-03-29 04:06:02
【问题描述】:

我有一个没有打字稿的角度模块和服务,例如:

MyModule = angular.module('MyModule', ['dependency1', 'dependency2']);
MyModule.factory('MyService', ['$otherDependency', function ($otherDependency) { 
    return { 
        myOperation: function(){...}
    };
}]);

我想在 typescript 类中使用此服务,而不将其他所有内容都转换为 typescript。我尝试了以下方法,但注入的服务始终为空:

/// <reference path="angular.d.ts"/>
module MyTypescriptModule { 
    export class MyClass extends MyOtherClass {
        static $inject = ['MyService'];
        constructor(private MyService) { ... }
    }
}

这可能吗?如果可以,我错过了什么?

更新: 我能够从他的 js bin 中使用 PSL 的建议,稍作修改以避免在这个问题的帮助下出现依赖错误:Call Angular JS from legacy code

var angularInjector = angular.element($("#divWithNgApp")).injector();
MyService = angularInjector.get('MyService');

【问题讨论】:

  • 这是什么注册的?它是控制器吗?工厂? ..
  • 你的意思是打字稿类?它只是一个对象。它以前对角度一无所知。
  • 那么 Angular 将如何知道该对象并注入您需要的内容,除非您将其注册为 Angular 实体。您也可以尝试使用 angular.injector 获取服务实例并在您的对象中使用它。
  • 你能举个例子吗?
  • 当然.. 像这样.. jsbin.com/difijaga/1

标签: angularjs typescript


【解决方案1】:

Angular 服务只能注入 Angular “对象”...

如果你的类被控制器使用,你可以传递一个实例:

module SomeModule {
  class MyClass extends MyOtherClass {
    constructor(myService:MyService) {
    }
  } 
  class MyController {
    constructor(myService:MyService) {
      MyClass c = new MyClass(myService);
    }
  }
}

angular.module('app).controller('MyController', ['MyService', MyController]);

plunker 将有助于更好地回答...

【讨论】:

  • 控制器没有使用它。建议使用 angular.injector(['MyModule']) 但我收到 ($injector:unpr) 错误,因为 MyModule 本身具有依赖项。知道如何解决这个问题吗?
【解决方案2】:
 export class MyTypescriptModule implements MyTypescriptModule {

        public scope: any;
        public myService: any;

        constructor($scope:any, MyService:any) {

            this.scope = $scope;
            this.myService= MyService;

        }

然后在您的函数中,您可以使用this.myService 调用您的服务

【讨论】:

  • MyTypescriptModule 名称是发明的 :)
  • 您是说创建一个也称为 MyTypescriptModule 的接口吗?如果我按原样尝试,则会收到有关递归引用的错误。
  • 这就是为什么我提到名字是发明的,你必须改变你的名字!!!!您也不能完全实现或扩展某些东西
猜你喜欢
  • 2015-03-21
  • 2013-08-16
  • 2019-08-10
  • 2018-10-18
  • 2016-10-27
  • 2016-02-03
  • 2016-03-18
  • 2019-11-12
  • 2017-05-29
相关资源
最近更新 更多