【问题标题】:How to use injected services in static methods如何在静态方法中使用注入服务
【发布时间】:2015-06-08 14:05:30
【问题描述】:

我想同时使用 angularjs 和 typescript。 我正在尝试使用打字稿创建Orm factory 并遇到一些问题。

我将我的工厂类定义为:

class OrmModel implements IOrmModel {
    static $inject = ['$http', '$q', 'config'];

    private name:string;
    private isNewRecord:boolean = false;

    constructor(public $http:ng.IHttpService, private $q:ng.IQService, private config:Object) {
        //...
    }

    static findAll(params:ISearchParams, relations:string[]):ng.IPromise<OrmModel> {
        //...
    }
}

我在这里定义了工厂。

OrmModule:ng.IModel = angular.module('core.orm', []);
OrmModule.factory('OrmModel', ['$http', '$q', OrmModel]);

如何在findAll() 方法中使用$http$q

【问题讨论】:

  • 注意:对于一个类,你应该使用myModule.service('OrmModel', OrmModel)
  • 使用静态函数的依赖是个坏主意。但是,您可以声明一个静态变量private static $http;,然后在构造函数中执行:OrmModel.$http = $http;
  • 我想,我应该像 myModule.service('OrmModel', new OrmModel()) 这样使用 service,因为 Angular 中的服务大部分都是单例

标签: angularjs typescript static-methods inject


【解决方案1】:

要生活在 Angular 生态系统中,单身人士应该是服务。所以将findAll 函数移到它自己的服务中。这样它就可以访问其他服务,例如$http$q

【讨论】:

  • 即使我们正在编写打字稿,您也不建议使用单音?在使用 typescript singletones 时是否有任何方法可以访问注入的参数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
相关资源
最近更新 更多