我有一个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。
我有点卡住了:(
答案 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();