使用 Typescript 在 AngularJS 中注入一个工厂 [英] Inject a Factory in AngularJS using Typescript
问题描述
所以在普通的旧 Angular 中,你会像这样注入一个工厂:
So in plain old Angular, you would inject a Factory like so:
(function(angular){
"use strict";
var app = angular.module('app', []);
app.factory('MyFactory', ['$http', function($http) {
....
});
}());
现在使用打字稿,我正在尝试使用 $inject
像这样:
Now using Typescript, I am trying to use the $inject
like so:
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 中注入工厂的正确方法是什么?
What is the correct way to inject factories in Angular using Typescript?
推荐答案
app.factory('MyFactory', Services.MyFactory) 这不起作用,永远不会被实例化.
app.factory('MyFactory', Services.MyFactory) This does not work, never is instantiated.
没错.这是因为从不使用 new
运算符调用作为第二个参数 (MyFactory
) 传递的函数.如果您想使用 TypeScript 类,您必须使用 service
而不是 factory
.
True. This is because the function passed as a second argument (MyFactory
) is never called with the new
operator. If you want to use a TypeScript class you must use service
and not factory
.
new
操作符的使用是服务和工厂之间唯一的区别,所以您没有没有理由使用工厂
.两者都是 AngularJS 中的单例.
The usage of the new
operator is the only difference between a service and a factory, so there is no reason for you to use a factory
. Both are singletons in AngularJS.
这篇关于使用 Typescript 在 AngularJS 中注入一个工厂的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!