因此,在普通的旧Angular中,您将像这样注入(inject)一个Factory:

(function(angular){
    "use strict";

    var app = angular.module('app', []);
    app.factory('MyFactory', ['$http', function($http) {
    ....
    });
}());

现在使用Typescript,我试图像这样使用$inject:
module Services {
    export class MyFactory {
        static $inject = ['$http'];
        constructor(private $http: ng.IHttpService) {
        }
    }
}

var app = angular.module('app', []);

app.factory('MyFactory', Services.MyFactory) //<-- This does not work, never is instantiated.

app.factory('MyFactory', ['$http', Services.MyFactory]); //<-- No deal, it has constructor dependencies

// Seems you have to do this
app.factory('MyFactory', ['$http', ($http) => new Services.MyFactory($http)]);

使用Typescript在Angular中注入(inject)工厂的正确方法是什么?

最佳答案



真的。这是因为从未使用MyFactory运算符调用作为第二个参数传递的函数(new)。如果要使用TypeScript类,则必须使用service而不是factory
new运算符的用法是服务和工厂之间的唯一区别,因此没有理由使用factory。两者都是AngularJS中的单例。

09-12 07:13