Angularjs $q和$http可以被注入到.config部分吗
是否可以在模块的配置部分中插入$q?下面是我的示例配置部分Angularjs $q和$http可以被注入到.config部分吗,angularjs,Angularjs,是否可以在模块的配置部分中插入$q?下面是我的示例配置部分 .config(['$q', function ($q) { var func = function (inp) { var def = $q.defer(); if (inp == 1) def.resolve("Success"); else def.reject("Failure"); return def.
.config(['$q', function ($q) {
var func = function (inp) {
var def = $q.defer();
if (inp == 1)
def.resolve("Success");
else
def.reject("Failure");
return def.promise;
};
alert(func(1));
}]);
我遇到的第一个错误是
未捕获错误:未知提供程序:$q来自ReportModule
如果我改变
.config(['$q', function ($q) {}])
到
然后我得到一个错误,说uncaughttypeerror:Object没有来自ReportModule的方法'defer'
似乎我不能在配置部分注入$q。是这样还是我做错了什么?我有一个用例,需要在模块的配置部分使用$q和$http进行初始化。有什么技巧可以做到这一点吗?正确--您不能从配置函数中注入$http或$q。它们还不可用(也正在配置!)。我可以(在路由配置时):
您可以使用加载配置块中的$http
和$q
,可能还有其他服务:
angular.module('myApp').config(function () {
var injector = angular.injector(['ng']),
http = injector.get('$http'),
q = injector.get('$q');
});
模块上的
run
方法在配置阶段刚结束时运行,也许您可以使用它。有关注入$http
和$q
的方法,请参阅下面的答案。问题是,您可能正在注入未配置的服务。在配置阶段,$http
和$q
不可用有一个很好的理由——配置不能保证是确定性的。这可能在任何情况下都会起作用,也可能不会。没错,应该谨慎使用,这不是最佳做法。但是这是可能的。-1因为angular.injector(['ng'])
创建了一个新的注入器,这意味着您将获得使用该注入器获得的所有内容的新实例。看见这很难理解,可能会导致非常意外的结果。”$q'和“$http”不应直接用于配置阶段。还有其他的可能性。@Alex你能发布注入http和q的替代方案吗?谢谢@Miquel是的,我们在head命令中使用一个普通的ajax调用来获取初始化的相关数据。此数据存储在全局变量中。在配置阶段,我们只访问这个变量。不需要我们自己的PromisAPI。不太优雅。我们计划在html页面中包含初始化数据,因为它是由同一个servlet提供的……khoailang,这只是一个示例:)$timeout是一种模拟异步操作的方法。您可以使用$http、任何异步服务或smth来代替它
resolve: {
simpleStringParam: ["$q", "$timeout", function($q, $timeout){
var deferred = $q.defer();
$timeout(function(){
deferred.resolve("Allo!");
},8000);
return deferred.promise;
}]
}
angular.module('myApp').config(function () {
var injector = angular.injector(['ng']),
http = injector.get('$http'),
q = injector.get('$q');
});