2017-02-22 100 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"}; 
    }]);