2017-02-22 2 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 в каждом изменении состояния и перенаправить на страницу admin или chat. Я попытался добавить инициализацию isAdmin как $rootScope.isAdmin в .run(), но до того, как я могу исправить его значение в контроллере .run() throws isAdmin undefined error. Может ли кто-нибудь предложить обходной путь?Мне нужно получить доступ к переменной в .run() модуль в угловых и необходимо изменить значение этого в различных контроллерах

Заранее спасибо

+0

Вы пытались позвонить в службу? –

+0

Это действительно очень полезно для получения значения в каждом контроллере. –

+0

У i-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"}; 
    }]); 
Смежные вопросы