2015-04-01 13 views
14

Sto cercando di utilizzare un valore del cookie in più luoghi e nei più controllori ma ottengo errore che dice $ rootScope non è definita

Ecco il codice:

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

C'è un modo migliore per farlo? Fondamentalmente voglio il valore del cookie disponibile Sito vasta

risposta

20

vi siete persi aggiungere $rootScope dipendenza nel entrambi i controller

Codice

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

Assicurare array annotation of dependency injection per assicurarsi che non si romperà il codice mentre si fa minimizzazione JavaScript.

Side Nota: - Non utilizzare $rootScope per la condivisione di applicazioni funzione comune/dati, non usare il servizio/di fabbrica per lo stesso

+0

Nota a margine side side: https://docs.angularjs.org/misc/faq "[..] non creare un servizio il cui unico scopo nella vita è quello di memorizza e restituisci bit di dati " – Arigion

4

Non hai iniettare $ rootScope in MainController

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

Aggiornamento:

Innanzitutto creare un servizio che agisce come un ponte tra i controller:

1) addCookie utilizzato per aggiungere cookieet.

2) getCookie utilizzato per ottenere cookieet.

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

motivo per cui si stia mescolando fino sintassi di servizio con la fabbrica, si dovrebbe usare ' questo 'invece di' var' locale durante l'utilizzo del servizio, e non dovrebbe restituire oggetto, guarda questo http://stackoverflow.com/a/28262966/2435473 –

+1

@thanks parkar :) – squiroid

+0

il tuo amico di benvenuto .. –