在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?????
}])
答案 0 :(得分:0)
因为您有var main = angular.module('mymodule', [...])
,所以您的应用被命名为' mymodule&#39 ;;但是,对于您的控制器,您有angular.module('Mycontrollers', [])
。你所做的是实例化一个新的Angular实例。 Angular只会引导第一个实例化实例,因此需要使用angular.bootstrap
,但我猜测它实际上并不是你想要的。相反,请将angular.module('Mycontrollers', [])
替换为angular.module('mymodule').controller(...)
。注意缺少括号。现在您正在使用已经实例化的模块。