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

0

В блоке углового запуска я устанавливаю одно свойство на $ 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 run block above
    //however $rootScope.isAdmin does not exists here, WHY????? 

    }])
  • 0
    обработчик события "adal: loginSuccess", вероятно, запускается после контроллера
  • 0
    Как я могу убедиться, что adal: logingSuccess происходит в первую очередь до начала выполнения контроллера?
Показать ещё 3 комментария
Теги:
angularjs-scope
angularjs-rootscope

1 ответ

0

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

  • 0
    нет, это не правильно, смотрите мой обновленный код. Модуль 'MyController' на самом деле включен в main..i не поставил весь блок кода ..
  • 0
    Это не модуль. Это зависимость. Вы не можете дать контроллер зависимости. Кроме того, моя точка зрения на создание экземпляра Angular снова остается проблемой. Поскольку он создается, он не будет использовать тот же $ rootScope, что и исходное приложение Angular в mymodule.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню