2015-04-01 12 views
14

Próbuję użyć wartość cookie w wielu miejscach iw wielu kontrolerów, ale pojawia się błąd mówiąc $ rootScope nie jest zdefiniowana

Oto kod:

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

Czy jest lepszy sposób to zrobić? Zasadniczo chcę wartość cookies dostępne witryny szeroki

Odpowiedz

20

Przegapiłeś dodać $rootScope zależność w oba kontrolery

Kod

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

Zapewnienie array annotation of dependency injection aby upewnić się, że nie złamie kod robiąc minifikacji JavaScript.

marginesie: - Nie używać $rootScope do udostępniania aplikacji wspólna funkcja/dane, należy używać usług/fabryki w tym samym

+0

Notatka po stronie bocznej: https://docs.angularjs.org/misc/faq "[..] nie twórz usługi, której jedynym celem w życiu jest przechowuj i zwróć bity danych " – Arigion

4

Nie wstrzyknąć $ rootScope w mainController

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

Aktualizacja:

pierwsze stworzyć serwis, który działa jak pomost między kontrolerami:

1) AddCookie służy do dodawania plików cookie.

2) getCookie używane do otrzymania 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

dlaczego jesteś mieszania składni usług z fabryki, należy użyć ' to 'zamiast lokalnego' var' podczas korzystania z usługi, i nie powinien zwracać obiektu, spójrz na to http://stackoverflow.com/a/28262966/2435473 –

+1

@ thanks parkar :) – squiroid

+0

Twój powitanie gość .. –