我有一个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。
我有点卡住了:(
发布于 2018-08-02 19:14:36
完整的答案是:
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();
发布于 2018-08-02 00:25:43
在编写标准的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
https://stackoverflow.com/questions/51638006
复制相似问题