Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs $q和$http可以被注入到.config部分吗_Angularjs - Fatal编程技术网

Angularjs $q和$http可以被注入到.config部分吗

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.

是否可以在模块的配置部分中插入$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.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');
});