Как я могу очистить все значения AngularJS $и $rootScope внутри одной функции?

Мне нужно очистить все значения $scope во время выполнения некоторых операций.

Например: Если я нажимаю кнопку "Signout" для перенаправления на страницу "signin", то все $scope или $rootScope в сеансе следует очистить.

Как я могу это достичь?

Ответ 1

Вы можете сделать следующее:

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

Функция $new создает новую область видимости, наследующую переменные от родителя. true предотвращает наследование.

Но это неправильный подход, потому что, если вы используете вышеприведенную вещь, вы должны вручную загрузить функции контроллеров и воссоздать дерево областей.

Это может быть полезно, хотя, когда идея состоит в том, чтобы хранить инициализированные данные, которые хранятся в некоторых переменных, а затем, когда они назначаются, копируются в отображаемые переменные.

Правильное решение - очистить вручную каждое свойство в каждой области события выхода из системы, например: Событие выхода из системы:

$rootScope.$broadcast("logout");

Поймать событие:

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

Или, как предлагается в комментариях, использовать сервис, а затем быть очищенным.

Ответ 2

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