2017-02-22 97 views
1
.run(['$rootScope', '$state', 'Session', function ($rootScope, $state, Session) { 
    $rootScope.$on('$stateChangeStart', function (e, toState) { 
     console.log('inside .run') 
     if (toState.url == '/') { 
      e.preventDefault(); 
      if (Session.user) { // and isAdmin == true 
       $state.go('admin') 
      } //if isAdmin == false redirect to chat 

      else { 
       $state.go('login') 
      } 
     } else if (!Session.user && toState.url != '/login') { 
      e.preventDefault(); 
      $state.go('login') 
     }  

     return; 
    }); 
}]) 

它的值這是我的.RUN模塊和我需要初始化一個isAdmin變量,我可以在我的控制器中更改並檢查每個狀態更改是否爲isAdmin is,並重定向到adminchat頁面。 我試圖加入初始化isAdmin$rootScope.isAdmin.run()但我可以修復它的價值在控制器.run()拋出isAdmin未定義的錯誤。 任何人都可以提出解決方法嗎?我需要.RUN訪問一個變量()模塊中的角度和需要改變在不同的控制器

在此先感謝

+0

您是否嘗試致電服務? –

+0

這對於在每個控制器中獲得價值非常有幫助 –

+0

ui-state在控制器加載之前有4個事件,您必須檢查該變量是否具有設置的值 –

回答

0

審查下面的代碼它可以訪問範圍variables.Inject服務將訪問的變量和方法是可變palces可重複使用的空閒方式。

MyCtrl.js

(function() { 
    'use strict' 
    function MyCtrl($rootScope, $scope, MyService) { 
     MyService.getRootScopeData(); 
     MyService.setRootScopeData('How are you?'); 
    } 
    angular 
      .module("AppRootTest") 
      .controller('MyCtrl', ["$rootScope", "$scope", "MyService", MyCtrl]); 
}()); 

MyService.js

(function() { 
    'use strict' 
    function MyService($rootScope) { 
     function getRootScopeData() { 
      console.log("$rootScope.getRooScopeData"); 
      console.log($rootScope.someData); 
      return $rootScope.someData; 
     } 
     function setRootScopeData(value_) { 
      $rootScope.someData = {message: value_}; 
     } 
     return ({ 
      getRootScopeData: getRootScopeData, 
      setRootScopeData: setRootScopeData 
     }); 
    } 
    angular 
      .module("AppRootTest") 
      .service("HzPopupService", ['$rootScope', MyService]) 
}()); 

app.js

angular. 
    module('AppRootTest', ['ngResource','ngCookies','ngRoute','ui.router',]) 
    .config() 
    .run(['$rootScope', function ($rootScope) { 
      $rootScope.someData = {message: "hello"}; 
    }]);