web-dev-qa-db-fra.com

Comment puis-je effacer toutes les valeurs AngularJS $ scope et $ rootScope dans une seule fonction?

Je dois effacer tous les $scope valeurs lors de l'exécution de certaines opérations.

Par exemple: si je clique sur "Signout" bouton pour rediriger vers "signin" page, toutes les valeurs $ scope ou $ rootScope de la session doivent être effacées.

Comment puis-je atteindre cet objectif?

10
Gnik

Vous pouvez effectuer les opérations suivantes:

$rootScope = $rootScope.$new(true);
$scope = $scope.$new(true);

La fonction $new crée une nouvelle portée héritant des variables du parent. true empêche l'héritage.

Mais ce n'est pas la bonne approche, car si vous utilisez la chose ci-dessus, vous devez bootstrap les fonctions des contrôleurs manuellement et recréer l'arborescence des étendues.

This pourrait être utile cependant, où l'idée est de stocker les données initialisées sont stockées dans certaines variables puis, une fois affectées copiées dans les variables affichées.

La bonne solution consiste à effacer manuellement chaque propriété de chaque étendue de l'événement de déconnexion, comme ceci: Événement de déconnexion:

$rootScope.$broadcast("logout");

Attraper l'événement:

$rootScope.$on("logout", function(){
      $rootScope.myData = undefined;
});

Ou comme suggéré dans les commentaires, utiliser un service puis être nettoyé.

16
Michael
               You not want delete scope 
               var authScope =['authLogo','currentPath','pageTitle','app'];                       
                for (var prop in $rootScope) {
                    if (prop.substring(0,1) !== '$') {
                        if(authScope.indexOf(prop) ==-1)
                            delete $rootScope[prop];
                    }
                }
0
Taner Özel