2016-03-20 17 views
0

$stateChangeStart sayfamda run sayfamda, giriş yapmadıysanız, kullanıcı giriş yapmamışsa (özel loginProvider kullanarak) dinliyorum.Köşeli yönlendiriciyle yapılandırma nasıl yeniden yüklenir?

Kullanıcı oturumu açmadıysa, /#/home adresine gitmek için url'yi /#/login olarak değiştirirsiniz ... Bu durum sayfayı yeniden yüklemez, dolayısıyla kullanıcı ana sayfaya lol olarak erişebilir.

Peki, bir yolu nasıl yeniden yüklersiniz?

angular.module("app", [ 
    "app", 
    "ui.router" 
]) 
    .config(["$stateProvider", "$urlRouterProvider", "$httpProvider", function ($stateProvider, $urlRouterProvider, $httpProvider) { 
     $stateProvider 
      .state("login", { 
       url: "/login", 
       templateUrl: "app/login/login.html", 
       controller: "loginController", 
       authenticate: false 
      }) 
      .state("home", { 
       url: "/home", 
       templateUrl: "app/home/home.html", 
       controller: "homeController", 
       authenticate: true 
      }); 

     $urlRouterProvider.otherwise("login"); 
    }]) 
    .run(["$rootScope", "$state", "loginProvider", function ($rootScope, $state, loginProvider) { 
     $rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) { 
      if (toState.authenticate && !loginProvider.isLoggedIn()) { 
       $state.transitionTo("login"); 
       $state.reload(); // not working 
       $state.go("login", {}, {reload: true}); // not working 
      } 
     }); 
    }]); 

Açısal sürüm 1.5.1 ve açısal-ui yönlendirici sürüm 0.2.18 kullanıyorum.

+0

herhangi bir hatayla karşılaştı? – Sandeep

+0

@Sandeep Hata yok, sadece '/ #/home' seçeneğine gitmek, url’i'/#/login' olarak değiştirir ... ancak yine de ana sayfayı gösterir. Giriş sayfasına gitmek için * ve * sayfasına gitmesini istiyorum. –

+1

cevabını görmek benim için yararlı olabilir – Sandeep

cevap

2

event.preventDefault(); Benim isLoggedIn mantık bir F5 Sayfanın yenilenmesi yaşayamaz yapar

var isLoggedIn = loginProvider.isLoggedIn(); 

if (toState.authenticate && !isLoggedIn) { 
    event.preventDefault(); 
    $state.transitionTo("login"); 

} else if (fromState.name === "home" && isLoggedIn) { 
    event.preventDefault(); 
    $state.transitionTo("home"); 
} 

Not:

.run(["$rootScope", "$state", "loginProvider", function ($rootScope, $state, loginProvider) { 
     $rootScope.$on("$stateChangeStart", function (event, toState, toParams, fromState, fromParams) { 
      if (toState.authenticate && !loginProvider.isLoggedIn()) { 
       event.preventDefault(); 
       $state.go("login", {}, {reload: true}); 
      } 
     }); 
    }]); 
+0

için teşekkürler @Sandeep! 'Event.preventDefault()' işlevini kullanarak, artık oturum açılmadığında '/ #/login' * ve * tekrar yükler. Ancak şimdi * giriş yaptıktan sonra *, bir' F5 '/ #/home' re yenileyin -Sorunlara geri döner ... –

+0

Bence durumunuz doğru değil. Durumunu kontrol et. – Sandeep

+0

Önerdiğiniz gibi ek bir koşul ekledim ([cevabımı buraya bakın] (http://stackoverflow.com/a/36121737/1298685)). Bu, 'isLoggedIn 'bilgisini silen bir' F5' yenilemesi dışında sorunu çözer. * Yani *, sayfa yenileme üzerindeki verileri devam ettirmek için '$ cookies' kullanmam gerekiyor. Bu farklı bir soru, ben de bunu cevap olarak işaretleyeceğim. Tekrar teşekkürler @Sandeep! –

0

sayesinde @ için Sandeep cevabı, bu kodla $rootScope.$on("$stateChangeStart"... içinde yönlendirme sorunlarının büyük çoğunluğu çözüldü - angular-cookies, angular-local-storage, ya da verileri sürdürmek için kullanılacak benzerleri yapmak.