UI-router

时间:2016-05-11 18:32:48

标签: angularjs angular-ui-router

我已经编写了一个登录服务,存储了一个cookie(使用NgCookie),在我的应用程序中运行良好,除非是时候刷新页面或打开新标签等。我在app.js中的布局是这样的:

angular.module('app', ['listofDependencies'])
    .config(function($stateProvider, $urlRouterProvider) {
      $urlRouterProvider.otherwise('/');
      $stateProvider.state('login',
          view: login.html,
          controller: loginCtrl,
          authenticate: false)
        .state('bunchOfOtherStates',
          view: states.html,
          controller: statesCtrl,
          authenticate: true)
        .run(function($rootScope, $state, $cookieStore) {
            $rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams, $location) {
              if (toState.authenticate && !$cookieStore.get('whatever')) {
                $state.go('login');
              }
            });

当我实现这个时,会遇到很多问题。第一个是当应用程序加载时,它不会重定向到登录URL。 我是ui-router的新手,当我遇到堆栈溢出帖时,我还没有看到这样的布局。有什么建议吗?

编辑:真正令人不安的行为是当我导航到登录然后刷新一旦我登录应用程序再次重定向到登录页面。

2 个答案:

答案 0 :(得分:0)

您可以将sessionStorage用于此目的。

步骤:

add ngStorage.min.js in your file
add ngStorage dependency in your module
add $sessionStorage module in your controller
use $sessionStorage.key = value

答案 1 :(得分:0)

你会查看这个plunker,并举例说明你在寻找什么。     app.run(函数($ rootScope,$ state,$ location,Auth){

$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState) {

  var shouldLogin = toState.data !== undefined
                && toState.data.requireLogin 
                && !Auth.isLoggedIn ;

  // NOT authenticated - wants any private stuff
  if(shouldLogin)
  {
    $state.go('login');
    event.preventDefault();
    return;
  }


  // authenticated (previously) comming not to root main
  if(Auth.isLoggedIn) 
  {
    var shouldGoToMain = fromState.name === ""
                      && toState.name !== "main" ;

    if (shouldGoToMain)
    {
        $state.go('main');
        event.preventDefault();
    } 
    return;
  }

  // UNauthenticated (previously) comming not to root public 
  var shouldGoToPublic = fromState.name === ""
                    && toState.name !== "public"
                    && toState.name !== "login" ;

  if(shouldGoToPublic)
  {
      $state.go('public');console.log('p')
      event.preventDefault();
  } 

  // unmanaged
});
});