angularjs app结构/ $ scope

时间:2013-07-03 19:18:42

标签: angularjs angularjs-scope

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

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;
}]);

所以我指定的资源都没有(全部未定义):'$ scope','$ location','logger','ngGrid','transactionService'

任何关于此的灯光都会非常感激!

由于

2 个答案:

答案 0 :(得分: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

});

答案 1 :(得分:0)

我认为您正在使用服务注入交换模块加载

在声明pennywatch.controllers模块时,应该调用angular.module函数,在括号中传递模块依赖项,而不是服务。您无法访问的许多服务都在ng模块中,例如

服务注入在控制器级别应用