2013-07-03 138 views
0

我似乎无法正确连接它。我会列出适当的作品。我的问题是访问注入的资源。当我尝试引用它们时,所有依赖项都是不确定的。

var app = angular.module('app', ['ngResource','ui.bootstrap', 'ngGrid','app.services', 'app.directives', 'app.controllers' 
]) 
.config(['$routeProvider', function ($routeProvider) { 
    return $routeProvider. 
     when('/', { templateUrl: 'partials/transaction.view.html', controller: 'TransactionCtrl' }). 
     when('/about', { templateUrl: 'partials/about.view.html', controller: 'AboutCtrl' }). 
     when('/transaction', { templateUrl: 'partials/transaction.view.html', controller: 'TransactionCtrl' }). 
     otherwise({ redirectTo: '/' }); 
}]) 
.config(['$httpProvider', function ($httpProvider) { 
    return $httpProvider.responseInterceptors.push(['logger', '$rootScope', '$q', 
     function (logger, $rootScope, $q) { 
      var error, success; 
      success = function (response) { 
       $rootScope.$broadcast("success:" + response.status, response); 
       logger.log("success:" + response.status); 
       return response; 
      }; 
      error = function (response) { 
       var deferred; 
       deferred = $q.defer(); 
       $rootScope.$broadcast("error:" + response.status, response); 
       logger.log("error:" + response.status); 
       return $q.reject(response); 
      }; 
      return function (promise) { 
       return promise.then(success, error); 
      }; 
     } 
    ]); 
}]) 
.run(['$rootScope', 'logger', function ($rootScope, logger) { 
    return $rootScope.$on('$routeChangeSuccess', function (event, currentRoute, priorRoute) { 
     return $rootScope.$broadcast("" + currentRoute.controller + "$routeChangeSuccess", currentRoute, priorRoute); 
     }); 
}]); 

...控制器在这里:

angular.module('pennyWatch.controllers', ['$scope', '$location','logger', 'ngGrid',  'transactionService']). 
controller('TransactionCtrl', [function ($scope, logger, ngGrid, transactionService) { 

//code here 

}]). 
controller('AboutCtrl',[function ($scope, logger) { 
    $scope.logEntries = logger.logEntries; 
}]); 

所以没有我指定的资源可用(所有未定义): '$范围', '$位置', '记录', 'ngGrid','transactionService'

任何灯光都将不胜感激!

感谢

+1

可能应用于你正在使用错误的语法应该像控制器(“AboutCtrl”,['$范围','logger',function($ scope,logger){scope = logger.logEntries; }]); –

+0

谢谢@Ajaybeniwal!我改变了控制器的定义以符合建议。看来我已经采取了一些步骤 - 现在TransactionCtrl断点没有打。我把所有的代码放在jsfiddle中(减去视图)。也许这将有助于查明我的问题。 :-) http://jsfiddle.net/willtx/8jdLh/ –

回答

1

我敢肯定的控制器语法是:

.controller('TransactionCtrl', ['$scope', 'logger', 'ngGrid', 'transactionService', function ($scope, logger, ngGrid, transactionService) { 

//code here 

}]); 

首先列出注入什么,然后作为数组的最后一个元素来定义一个带参数的函数将代表注入的内容。

例如,你甚至可以有:

.controller('TransactionCtrl', ['$scope', 'logger', 'ngGrid', 'transactionService', function ($s, logr, ngGrid, transServ) { 

//code here 

}]); 

这是为了让容易缩小。

替代控制器语法在选择要注入的内容时使用参数名称。由于缩小通常会缩短变量名称,因此建议您使用上面的语法。

替代语法:

.controller('TransactionCtrl', function ($scope, logger, ngGrid, transactionService) { 

//code here 

}); 
+0

我有更多的人指出我的定义不正确,但似乎我也有其他问题。感谢您的时间和意见。 –

0

我想你切换模块加载与服务注入

声明pennywatch.controllers模块时,你应该调用angular.module函数传递模块依赖括号,不服务。许多您不能访问这些服务都是ng模块中,例如

服务注入在控制器级别