2016-04-19 26 views
0

angleの実行ブロックでは、$ rootScopeに1つのプロパティを設定していますが、コントローラがそのプロパティを実行すると$ rootScopeには存在しません。

アプリケーションが起動すると、$ rootScope.isAdminが実行されているコントローラが$ rootScopeに存在しない場合、デバッガでは "adal:loginSuccess"ハンドラが実行され、$ rootScope.isAdminが "true"になります。どうして?アプリが 'のmymodule' という名前のされるようにあなたは、var main = angular.module('mymodule', [...])を持っているので以下 は

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

"adal:loginSuccess"イベントハンドラがコントローラの後に実行されている可能性があります – rob

+0

コントローラの起動を実行する前にadal:logingSuccessが最初に発生するようにするにはどうすればよいですか? – LP13

+0

他の何かがロードされるまでコントローラがロードされないようにするには、ルータ 'resolve' https://docs.angularjs.org/api/ngRoute/provider/$routeProvider – rob

答えて

0

私のコードです。しかし、コントローラの場合はangular.module('Mycontrollers', [])です。あなたがしたことは、Angularの新しいインスタンスをインスタンス化することです。 Angularはインスタンシエーションの最初のインスタンスのみをブートストラップするので、angular.bootstrapを使用する必要がありますが、実際にはあなたが望むものではないと思います。代わりにangular.module('Mycontrollers', [])angular.module('mymodule').controller(...)に置き換えます。角括弧がないことに注意してください。すでにインスタンス化したモジュールを使用しています。

+0

これは正しくありません。最新のコードを見てください。 'MyController'モジュールは実際にmain..iに含まれています。コードブロック全体を入れませんでした。 – LP13

+0

これはモジュールではありません。それは依存関係です。コントローラに依存関係を与えることはできません。また、Angularを再度インスタンス化することについての私の要点は、依然として問題です。それはインスタンス化されているので、 'mymodule'という最初のインスタンス化されたAngular appと同じ$ rootScopeを共有しません。 –

+0

@ChrisStanley Angularで複数のモジュールを作成することができ、それらはすべて同じ '$ rootScope'を共有します:https://plnkr.co/edit/jSYYfUpuQuAzQ5s2pbLn?p=preview – rob

関連する問題