我正在尝试创建一个简单的示例,我从AngularJS的服务解决方案中获取promise / defer对象:
var $q;
function init() {
var $injector = window.angular.injector();
console.log($injector);
$injector.invoke(["$q", function (_$q) {
console.log($q);
$q = _$q;
}]);
}
init();
但结果是:
错误:未知提供商:$ qProvider< - $ q [打破此错误]
throw Error(“未知提供者:”+ path.join('< - '));
我可以错过什么?
答案 0 :(得分:12)
您必须添加提供商所在的模块,如下所示:
var $injector = window.angular.injector(['ng']);
然后它会起作用!
编辑:关于'ng'模块,文档明确指出必须明确添加。 From the angular injector docs:
modules – {Array.<string|Function>} – A list of module functions or their aliases.
See angular.module. The ng module must be explicitly added.
答案 1 :(得分:0)
如果你在angular.js模块的生命周期之外,请使用https://github.com/kriskowal/q,我走这条路并且它不能很好地工作,$ q并不意味着在bootstraped模块之外使用(需要a $ rootScope)。