如何将非打字角度服务注入到打字稿类中?

时间:2014-07-24 18:33:12

标签: angularjs typescript

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

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

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

/// <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');

2 个答案:

答案 0 :(得分:0)

 export class MyTypescriptModule implements MyTypescriptModule {

        public scope: any;
        public myService: any;

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

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

        }

然后,在您的功能中,您可以使用this.myService

来呼叫您的服务

答案 1 :(得分:0)

角度服务只能注入角度“对象”......

如果您的类正由控制器使用,您可以传递一个实例:

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]);

一名侦探有助于更好地回答......