如何将$ q提供程序插入未包装到angular模块中的类中?

时间:2018-08-01 16:17:31

标签: javascript angularjs ecmascript-6 angularjs-scope

我有一个es6模块

MyModule

let _q$;// I would like the $q provider of angularjs to be a private property of that module

export default class MyClass{
   constructor($q){
      _$q = $q
    }
}

实际上,实例化MyClass的唯一方法是通过angularjs函数:

import MyClass from "../model/MyClass";
angular.module('myModule').run(function($q){
   var myObject = new MyClass($q);
})

问题在于我无法在当前文件之外访问myObject。

我想做的是在MyModule中实例化MyClass,然后将其导出:

class MyClass{
   constructor($q){
      _$q = $q
    }
}

export myObject = new MyClass($q);

这里的问题是我不知道如何访问$ q。

我有点卡住了:(

2 个答案:

答案 0 :(得分:1)

在编写标准angularJs代码(例如,服务,组件或带有.run块的示例)时,将自动为您应用注射器,但也可以显式调用它。类似以下内容可能对您有用:

import angular from 'angular';
const $injector = angular.injector();
const $q = $injector.get('$q');

class MyClass {
  someMethod() {
    return $q.resolve('something');
  }
};

export myObject = new MyClass();

有关注射器的文档,请参见以下页面:https://docs.angularjs.org/api/auto/service/$injector

答案 1 :(得分:1)

完整答案是:

import angular from 'angular';
const $injector = angular.injector(['ng']);//<- ['ng'] is necessary to tell angular in which module the provider resides.
const $q = $injector.get('$q');

class MyClass {
  someMethod() {
    return $q.resolve('something');
  }
};

export let myObject = new MyClass();