我尝试在多个地方和多个控制器中使用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值可用
答案 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
});