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