web-dev-qa-db-fra.com

$ rootScope n'est pas défini

J'essaie d'utiliser une valeur de cookie à plusieurs endroits et dans plusieurs contrôleurs, mais je reçois une erreur en disant $ rootScope n'est pas défini

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

Y a-t-il une meilleure manière de faire cela? Fondamentalement, je veux que la valeur des cookies soit disponible sur tout le site

15
Darren Sweeney

Vous avez manqué d'ajouter $rootScope dépendance dans les deux contrôleurs

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

Assurez-vous annotation de tableau d'injection de dépendance pour vous assurer qu'il ne cassera pas le code lors de la minification JavaScript.

Note latérale: - N'utilisez pas $rootScope pour partager les fonctions/données communes de l'application, utilisez le service/usine pour les mêmes

24
Pankaj Parkar

Vous n'avez pas injecté $ rootScope dans mainController

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

Mise à jour:

Créez d'abord un service qui agit comme un pont entre les contrôleurs:

1) addCookie utilisé pour ajouter un cookie.

2) getCookie utilisé pour obtenir le jeu de cookies.

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