注入一个工厂使用打字稿AngularJS [英] Inject a Factory in AngularJS using Typescript

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

问题描述

因此​​,在普通的旧角,你会注入一个厂,像这样:

 (函数(角){
    使用严格的;    VAR应用= angular.module('应用',[]);
    app.factory('MyFactory',['$ HTTP',函数($ HTTP){
    ....
    });
}());

现在使用打字稿,我试图使用 $注像这样:

 模块服务{
    出口类MyFactory {
        静态$注射='$ HTTP'];
        构造函数(私人$ HTTP:ng.IHttpService){
        }
    }
}VAR应用= angular.module('应用',[]);app.factory('MyFactory',Services.MyFactory)//< - 这是不行的,从来没有被实例化。app.factory('MyFactory',['$ HTTP,Services.MyFactory]); //< - 没有交易,它具有构造函数依赖//看来你必须这样做
app.factory('MyFactory',['$ HTTP',($ HTTP)=>新建Services.MyFactory($ HTTP)]);

什么是角使用打字稿注入工厂的正确方法是什么?


解决方案

  

app.factory('MyFactory',Services.MyFactory)这不工作,从来没有被实例化。


真。这是因为该函数作为第二个参数传递( MyFactory )永远不会被调用与运营商。如果你想使用一个打字稿类,你的必须的使用服务,而不是工厂

运算符的使用是的只有的服务和工厂之间的差异,所以的没有理由让你使用工厂。两者都是AngularJS单身。

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) {
    ....
    });
}());

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

What is the correct way to inject factories in Angular using Typescript?

解决方案

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

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.

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.

这篇关于注入一个工厂使用打字稿AngularJS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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