2015-04-01 15 views
14
definiert

Ich versuche, einen Cookie-Wert an mehreren Stellen zu verwenden und in mehreren Controllern, aber ich erhalte Fehler sagen $ rootScope nicht definiert ist

Hier ist der Code:

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

Gibt es einen besseren Weg, dies zu tun? Grundsätzlich möchte ich den Cookie-Wert vorhanden Website breit

Antwort

20

Sie verfehlten $rootScope Abhängigkeit in beide Controller

-Code

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

Stellen Sie sicher, array annotation of dependency injection hinzuzufügen es nicht den Code, um sicherzustellen, brechen während JavaScript minification tun.

Side Hinweis: - Verwenden Sie $rootScope nicht für die gemeinsame Nutzung Anwendung gemeinsame Funktion/Daten, keine Service/Fabrik für die gleiche

+0

Side Note Randnotiz: https://docs.angularjs.org/misc/faq "[..] erstellen Sie keine Dienstleistung, deren einziger Zweck im Leben ist Daten speichern und zurückgeben " – Arigion

4

Sie nicht $ rootScope in mainController

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

aktualisieren injizieren:

Erster einen Dienst erstellen, die zwischen den Controllern wirkt wie eine Brücke:

1) addCookie zum Hinzufügen von Cookies verwendet.

2) GetCookie verwendet, um Cookieset zu erhalten.

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

verwenden, warum Sie Service-Syntax mit Fabrik mischen, sollten Sie ' this 'anstelle von lokalen' var' während der Verwendung von Service, & sollte nicht Objekt zurückgeben, schauen Sie sich diese http://stackoverflow.com/a/28262966/2435473 –

+1

@ thanks parkar :) – squiroid

+0

Ihr Willkommen Kumpel .. –