2015-09-02 1 views
0

Я только называю $ state.go один раз. После первого вызова $ state.go страница продолжает обновляться и вызывать $ stateChangeStart. Я подозреваю, что это имеет какое-то отношение к конфигурации StateProvider. Любые указания относительно того, что может быть неправильным?Ui-router FromState всегда ^, бесконечный цикл

Вот GIF проблемы, и код, который я думаю, является виновником ниже: http://i.giphy.com/3o85xGdxHnkanVecgM.gif

angular.module('ticketingSystemApp', ['ui.router', 'ngCookies', 'ticketingSystemApp.filters', 'ticketingSystemApp.directives', 'ticketingSystemApp.controllers', 'ticketingSystemApp.services']) 
.run(['$state', '$rootScope', function ($state, $rootScope) { 
    $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) { 
     alert("ToState=" + toState.name + " FromState=" + fromState.name + " url=" + fromState.Url); 

     if (($rootScope.username == null || $rootScope.password == null) && toState.name !== "login") { 
      $state.go("login"); 
      e.preventDefault(); 
     } else if ($state.name === "") { 
      $state.go('userpanel'); 
      e.preventDefault(); 
     } 
    }); 
    } 
]); 



    .config([ 
     '$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider) { 
      $locationProvider.hashPrefix('!').html5Mode(true); 
      // UI States, URL Routing & Mapping. For more info see: https://github.com/angular-ui/ui-router 
      // ------------------------------------------------------------------------------------------------------------ 
      $stateProvider 
       .state('login', { 
        url:'/login', 
        views: { 
         "mainContent": { 
          templateUrl: '/Account/Login' 
         } 
        } 

       }) 
       .state('userpanel', { 
        url:'/userpanel', 
        views: { 
         "mainContent": { 
          templateUrl: '/UserPanel' 
         } 
        } 

       }); 

      //We don't know where we are. Go to user panel. 
      $urlRouterProvider.otherwise(function ($injector, $location) { 
       var $state = $injector.get('$state'); 

       if ($state.name === undefined) { 
        $state.go('userpanel'); 
        return; 
       } 

      }); 
     } 
    ]) 

ответ

0

Глупая ошибка - если вы столкнулись с данной проблемой, помните, что вызов TemplateUrl на стороне сервера странице будет чтобы страница сервера отображалась, что в свою очередь вызовет главную страницу для рендеринга.

Так что, если вы определяете свои угловые скрипты на главной странице, используйте код, подобный приведенному выше, сломает его.

Смежные вопросы