Не можете получить доступ к свойству $rootScope из контроллера?

В блоке запуска angular я устанавливаю одно свойство в $ rootScope, однако, когда контроллер выполняет, это свойство не существует в $ rootScope.

Когда приложение запускается, в отладчике я вижу, что обработчик "adal:loginSuccess" выполняется, и $rootScope.isAdmin действительно получает наборы в "true", однако, когда контроллер начинает выполнение, $rootScope.isAdmin не существует в $ rootScope. Зачем? Ниже мой код

app.js

    var main = angular.module('mymodule', [
        'ngAnimate','ngRoute','Mycontrollers','AdalAngular'...

    ]);

    main.config(['$httpProvider','adalAuthenticationServiceProvider', function ($httpProvider,adalProvider) {  
        adalProvider.init(
            {
                // config Azure Client ID Here
            },
            $httpProvider
            );

    }]);

    main.run(["$rootScope", "$state", "API", "usSpinnerService",
        function ($rootScope, $state, API, usSpinnerService,) {      

             $rootScope.$on("adal:loginSuccess", function () { 
                       $rootScope.isAdmin = user.isAdmin;
             });

        }]);

Controller.js

angular.module('Mycontrollers', [])
    .controller('HeaderCtrl', ['$rootScope','$scope',   'adalAuthenticationService', function ($rootScope, $scope, adalAuthenticationService) {

    //$rootScope.isAdmin is set in angular's run block above
    //however $rootScope.isAdmin does not exists here, WHY????? 

    }])

1 ответ

Потому что у вас есть var main = angular.module('mymodule', [...])так что ваше приложение называется mymodule; Тем не менее, для ваших контроллеров у вас есть angular.module('Mycontrollers', []), То, что вы сделали, - это создание нового экземпляра Angular. Angular загрузит только первый экземпляр экземпляра, поэтому нужно будет использовать angular.bootstrap, но я предполагаю, что это на самом деле не то, что вы хотите. Вместо этого замените angular.module('Mycontrollers', []) с angular.module('mymodule').controller(...), Обратите внимание на отсутствие скобок. Теперь вы используете модуль, который вы уже создали.

Другие вопросы по тегам