无法在Angular中注入$ q?

时间:2015-09-16 14:03:17

标签: angularjs dependency-injection q

大家。

这里有一个非常奇怪的(对我来说)问题。我试图在我的一个控制器中注入$ q lib,当我尝试console.log()时,它返回" undefined"。我正在我的一个服务中注入相同的库,并且它在那里工作!让我告诉你:

服务:

(function() { 'use strict';
  angular
  .module('app.grid')
  .factory('GridData', GridData);

  GridData.$inject = ['$http', '$q'];
  function GridData($http, $q) {
...

控制器(不工作):

(function() {
'use strict';
  angular
  .module('app.grid')
  .controller('GridCtrl', GridCtrl);

  GridCtrl.$inject = ['$log', '$scope', 'GridData', '$q'];
  function GridCtrl($log, $scope, GridData, $rootScope, $q) {
    console.log($q); // Returns "undefined"
...

我想知道你们之前是否有人遇到过同样的问题?它可能是一种真正的愚蠢,就像它一直如此,但由于某种原因我无法看到它:(

干杯, ħ

2 个答案:

答案 0 :(得分:4)

您需要将$ rootScope添加到$ inject数组:

list<A*> l;
cin >> dummy;
// The list will allocate space to hold the pointers:
l.resize (90000);
cin >> dummy;
// Allocate instances for each pointer in the list
for (auto & ptr : l) {
  ptr = new A{};
}
cin >> dummy;
// Free the allocated instances
for (auto & ptr : l) {
  delete ptr;
}
cin >> dummy;
// Erase all elements from the list.
// Note that this is not necessary, when
// the list goes out of scope at the end
// of main this is done by the list destructor.
// Moreover, there's a function to erase
// all elements from the list:
//  l.clear();
auto it = l.begin();
while (it != l.end()) {
  it = l.erase(it);
}
cin >> dummy;

如果不需要,请将其从参数列表中删除:

GridCtrl.$inject = ['$log', '$scope', 'GridData', '$rootScope', '$q'];

答案 1 :(得分:3)

你有太多的论点:

GridCtrl.$inject = ['$log', '$scope', 'GridData', '$q'];
function GridCtrl($log, $scope, GridData, $rootScope, $q) {
  //                                      ^
}

你没有注射$rootScope$q服务将在您的控制器中提供,它将由$rootScope而不是$q引用。删除它,它应该工作!或者,将'$rootScope添加到依赖关系数组。