无法在 Angular 中注入 $q?

Can't inject $q in Angular?

大家。

我有一个非常奇怪的(对我来说)问题。我试图在我的一个控制器中注入 $q 库,当我尝试 console.log() 它时,它 returns "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"
...

我想知道你们以前是否遇到过同样的问题?这可能真的很愚蠢,一如既往,但由于某种原因我看不到它:(

干杯, H

你的论点太多了:

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

您没有注射 $rootScope$q 服务将在您的控制器中可用,它只会被 $rootScope 而不是 $q 引用。删除它,它应该工作!或者,将 '$rootScope 添加到依赖项数组。

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

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

如果不需要,也可以从参数列表中删除:

function GridCtrl($log, $scope, GridData, $q) {