Search code examples
angularjsng-classangularjs-rootscope

Variable class not changed when modify $rootscope


I have two controllers:

Parent Controller

'use strict';

app.controller('CoreController', function($scope,$window,$location,$rootScope,AuthFactory) {
    var requiredLogin = true;

    $rootScope.bodyClass = '';
    $rootScope.pageTitle = '';

    $scope.Usuario = AuthFactory.user();
});

Child Controller

'use strict';

app.controller('SignController', function($scope, $controller, $stateParams,$rootScope, AuthFactory) {
    angular.extend(this, $controller('CoreController', {$scope: $scope}));

    $scope.EmailDefault = $stateParams.email;

    if(angular.isDefined($stateParams.pass)){
        $scope.SpecifyPass = $stateParams.pass;
    }else{
        $scope.SpecifyPass = true;
    }

    switch($stateParams.mode) {
        case "github":
            $rootScope.bodyClass = "dgdfg";
        break;
        case "google":
            $rootScope.bodyClass = "login_registro";
        break;
        default:
            $rootScope.bodyClass = "login_registro";
    }
});

I set class like this:

<body id="inicio" ng-class="bodyClass" data-spy="scroll" data-target=".navbar-fixed-top" data-offset="200">

But when i try to modify $rootscope the class doesnt change.

What do i do wrong?


Solution

  • I solved it adding "statechangedsucces" event to my switch statement in Child controller:

    'use strict';
    
    app.controller('SignController', function($scope, $controller, $stateParams,$rootScope, AuthFactory) {
        angular.extend(this, $controller('CoreController', {$scope: $scope}));
    
        $scope.EmailDefault = $stateParams.email;
    
        if(angular.isDefined($stateParams.pass)){
            $scope.SpecifyPass = $stateParams.pass;
        }else{
            $scope.SpecifyPass = true;
        }
    
        $scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){
            switch($stateParams.mode) {
                case "github":
                    $rootScope.bodyClass = "login_github";
                break;
                case "google":
                    $rootScope.bodyClass = "login_google";
                break;
                default:
                    $rootScope.bodyClass = "login_registro";
            }
        });
    });