因此,在普通的旧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中的单例。