使用 Typescript 在 AngularJS 中注入一个工厂 [英] Inject a Factory in AngularJS using Typescript

查看:25
本文介绍了使用 Typescript 在 AngularJS 中注入一个工厂的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以在普通的旧 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆