human
J'ai un problème où j'initialise une variable dans la portée d'un contrôleur. Ensuite, elle est modifiée dans un autre contrôleur lorsque l'utilisateur se connecte. Cette variable est utilisée pour contrôler des éléments tels que la barre de navigation et restreindre l'accès à certaines parties du site en fonction du type d'utilisateur, il est donc important qu'elle conserve sa valeur. Le problème est que le contrôleur qui l'initialise est appelé à nouveau par Angular d'une manière ou d'une autre, puis réinitialise la variable à sa valeur initiale. 
Je suppose que ce n'est pas la bonne façon de déclarer et d'initialiser des variables globales, enfin ce n'est pas vraiment global, donc ma question est quelle est la bonne façon et y a-t-il de bons exemples qui fonctionnent avec la version actuelle d'Angular
gpt
Vous avez essentiellement 2 options pour les variables "globales" :
* utiliser un ```$rootScope```
* utiliser un service

```$rootScope``` est un parent de toutes les portées, donc les valeurs exposées là-bas seront visibles dans tous les modèles et contrôleurs. Utiliser le ```$rootScope``` est très facile car vous pouvez simplement l'injecter dans n'importe quel contrôleur et modifier les valeurs dans cette portée. Cela peut être pratique mais présente tous les problèmes des variables globales.

Les services sont des singletons que vous pouvez injecter dans n'importe quel contrôleur et exposer leurs valeurs dans la portée d'un contrôleur. Les services, étant des singletons, sont toujours "globaux", mais vous avez un bien meilleur contrôle sur l'endroit où ils sont utilisés et exposés.

Utiliser des services est un peu plus complexe, mais pas tant que ça, voici un exemple :
```
var myApp = angular.module('myApp',[]);
myApp.factory('UserService', function() {
  return {
      name : 'anonyme'
  };
});
```
et ensuite dans un contrôleur :
```
function MyCtrl($scope, UserService) {
    $scope.name = UserService.name;
}
```