2015-04-01 102 views
14

我試圖在多個地方和多個控制器中使用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值可用站點寬

回答

20

你錯過添加$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共享應用通用功能/數據,請使用服務/工廠相同

+0

旁註旁邊注:https://docs.angularjs.org/misc/faq「[..]不要創建一個服務,其唯一目的是在生活中存儲和返回數據位「 – Arigion 2017-11-17 10:15:13

4

你沒有在mainController注入$ rootScope

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

更新:

首先創建就像控制器之間的橋樑服務:

1)addCookie用於添加cookieset。

2)getCookie用於獲取cookieset。

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 
}); 
+1

爲什麼你服務的語法與工廠混合起來,你應該使用'這'而不是本地'var'在使用服務時,&不應該返回對象,請看這個http://stackoverflow.com/a/28262966/2435473 – 2015-04-01 17:35:10

+1

@thanks parkar :) – squiroid 2015-04-01 17:42:14

+0

您的歡迎夥計.. – 2015-04-01 17:42:49