$ rootScope未定义

时间:2015-04-01 17:18:29

标签: javascript angularjs cookies dependency-injection

我尝试在多个地方和多个控制器中使用Cookie值,但我收到错误消息 $ rootScope未定义

以下是代码:

capApp.controller('cookieCtrl', ['$scope','$cookies', function($scope, $rootScope, $cookies) {
  // set variable for nav
  $rootScope.cookieSet = $cookies.user_id;
}]);

capApp.controller('mainController', function($scope, $location) {  
  $scope.user_id = $rootScope.cookieSet; // set global var
});

有更好的方法吗?基本上我希望网站范围内的cookie值可用

2 个答案:

答案 0 :(得分:24)

您错过了在两个控制器

中添加$rootScope依赖项

<强>代码

capApp.controller('cookieCtrl', ['$scope','$rootScope', '$cookies', 
  function($scope, $rootScope, $cookies) {
  // set variable for nav
  $rootScope.cookieSet = $cookies.user_id;
}]);

capApp.controller('mainController', ['$scope', '$location', '$rootScope', 
  function($scope, $location, $rootScope) {  
  $scope.user_id = $rootScope.cookieSet; // set global var
});

确保array annotation of dependency injection确保在进行JavaScript缩小时不会破坏代码。

  

附注: - 不要使用$rootScope来共享应用程序常用功能/数据,请使用相同的服务/工厂

答案 1 :(得分:4)

你没有在mainController中注入$ rootScope

capApp.controller('mainController', function($scope,$rootScope, $location) {  
  $scope.user_id = $rootScope.cookieSet; // set global var
});

<强>更新

首先创建一个充当控制器之间桥梁的服务:

1)addCookie用于添加cookie集。

2)getCookie用于获取cookie集。

capApp.factory('user', function() {
  var cookieSet;

  var addCookie = function(val) {
      cookieSet=val;
  }

  var getCookie = function(){
      return cookieSet;
  }

  return {
    addCookie : addCookie,
    getCookie : getCookie 
  };

});

capApp.controller('cookieCtrl', ['$scope', 'user', '$cookies', function($scope, user, $cookies) {
  // set variable for nav
  user.addCookie($cookies.user_id);
}]);

capApp.controller('mainController', function($scope, $location,user) {  
  $scope.user_id =user.getCookie(); // set global var
});