0

在 Angular 的运行块中,我在 $rootScope 上设置了一个属性,但是当控制器执行时,$rootScope 上不存在该属性。

当应用程序启动时,在调试器中我看到“adal:loginSuccess”处理程序被执行并且 $rootScope.isAdmin 确实设置为“true”,但是当控制器开始执行 $rootScope.isAdmin 时 $rootScope 上不存在。为什么?下面是我的代码

应用程序.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;
             });

        }]);

控制器.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????? 

    }])
4

1 回答 1

0

因为你有var main = angular.module('mymodule', [...]),所以你的应用程序被命名为'mymodule';但是,对于您的控制器,您拥有angular.module('Mycontrollers', []). 您所做的是实例化一个新的 Angular 实例。Angular 只会引导实例化的第一个实例,因此需要使用angular.bootstrap,但我猜这实际上不是你想要的。相反,替换angular.module('Mycontrollers', [])angular.module('mymodule').controller(...). 注意缺少括号。现在您正在使用您已经实例化的模块。

于 2016-04-19T21:22:06.750 回答