【问题标题】:Can $q and $http be injected in the .config section$q 和 $http 可以注入 .config 部分吗
【发布时间】:2013-12-17 05:23:02
【问题描述】:

是否可以在我的模块的配置部分注入 $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));
}]);

我得到的第一个错误是 未捕获的错误:未知提供程序:来自 ReportModule 的 $q 如果我改变了

.config(['$q', function ($q) {}])

.config(['$qProvider', function ($q) {}])

然后我收到一条错误消息 Uncaught TypeError: Object # has no method 'defer' from ReportModule

似乎我无法在配置部分注入 $q。是这样还是我做错了什么?我有一个用例,我需要在模块的配置部分中使用 $q 和 $http 进行初始化。有什么技术可以做到这一点吗?

【问题讨论】:

  • run 模块上的方法在配置阶段之后运行,也许你可以使用它。

标签: angularjs


【解决方案1】:

正确——你不能从配置函数中注入 $http 或 $q。它们尚不可用(它们也在配置中!)。

【讨论】:

  • 在下面查看我的答案,了解注入 $http$q 的方法。
【解决方案2】:

您可以使用angular.injector 加载$http$q,以及可能在您的配置块中的其他服务:

angular.module('myApp').config(function () {
    var injector = angular.injector(['ng']),
        http = injector.get('$http'),
        q = injector.get('$q');
});

【讨论】:

  • 这个问题是你注入了可能未配置的服务。 $http$q 在配置阶段不可用是有充分理由的——不能保证配置是确定性的。这可能会也可能不会在任何情况下一直有效。
  • 确实如此,应谨慎使用,并非最佳做法。但这是可能的。
  • -1 因为angular.injector(['ng']) 创建了一个新的注入器,这意味着您将获得使用该注入器获得的所有内容的新实例。见my fiddle。这很难理解,可能会导致非常意想不到的结果。 '$q' 和 '$http' 不应直接在配置阶段使用。还有其他可能性。
  • @AlexS 你能发布注入 http 和 q 的替代方案吗?谢谢!!
  • @Miquel 是的,我们在 head-sction 中使用一个普通的 ajax 调用来获取初始化的相关数据。此数据存储在全局变量中。在配置阶段,我们只是访问这个变量。不需要我们自己的promis api。不是很优雅。我们计划在我们的 html 页面中包含初始化数据,因为它由同一个 servlet 提供服务...
【解决方案3】:

这对我来说是可能的(当路由配置时):

resolve: {
   simpleStringParam: ["$q", "$timeout", function($q, $timeout){
      var deferred = $q.defer();
          $timeout(function(){
              deferred.resolve("Allo!");
          },8000);
      return deferred.promise;
   }]
}

【讨论】:

  • khoailang,这只是示例 :) $timeout 是一种模拟异步操作的方法。取而代之的是,你可以使用 $http,任何你想要的异步服务或 smth
猜你喜欢
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2013-09-25
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多