SORU
18 Temmuz 2012, ÇARŞAMBA


Yönlendirme belirli bir güzergah durumuna göre

Giriş görünümü olan küçük bir AngularJS uygulaması ve ana görünüm, gibi yapılandırılmış yazıyorum:

$routeProvider
 .when('/main' , {templateUrl: 'partials/main.html',  controller: MainController})
 .when('/login', {templateUrl: 'partials/login.html', controller: LoginController})
 .otherwise({redirectTo: '/login'});

Benim LoginController kullanıcı kombinasyonu pas/kontrol eder ve $rootScope bu yansıtan bir özellik kümeleri:

function LoginController($scope, $location, $rootScope) {
 $scope.attemptLogin = function() {
   if ( $scope.username == $scope.password ) { // test
        $rootScope.loggedUser = $scope.username;
        $location.path( "/main" );
    } else {
        $scope.loginError = "Invalid user/pass.";
    }
}

Her şey çalışıyor, ama ben 5 ** erişim eğer giriş ekranı atlayarak bitiriyorum. "Ne zaman güzergah değişiklikleri, $rootScope.gibi bir şeyler yazmak istedim boş zaman /giriş yönlendirme loggedUser"

...

... bekle. Rota değişiklikleri bir şekilde dinleyebilir miyim? Bu soru zaten post ve bakmaya devam edeceğim.

CEVAP
18 Temmuz 2012, ÇARŞAMBA


Üzgünüm benim kendi soruyu cevaplamak için, ama bazı belge ve kaynak kodu ile birkaç dalış sonra, o çalışma var sanırım. Belki de bu bir başkası için yararlı olacak mı?

Modül yapılandırması için aşağıdaki eklendi:

angular.module(...)
 .config( ['$routeProvider', function($routeProvider) {...}] )
 .run( function($rootScope, $location) {

    // register listener to watch route changes
    $rootScope.$on( "$routeChangeStart", function(event, next, current) {
      if ( $rootScope.loggedUser == null ) {
        // no logged user, we should be going to #login
        if ( next.templateUrl == "partials/login.html" ) {
          // already going to #login, no redirect needed
        } else {
          // not going to #login, we should redirect now
          $location.path( "/login" );
        }
      }         
    });
 })

Tuhaf bir şey "" Rota nesne bir url veya başka bir şey yoktu. çünkü ertesi kısmi adı (login.html) test etmem gerekiyordu. Belki daha iyi bir yolu var mı?

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • curioustravelers

    curioustrave

    12 AĞUSTOS 2006
  • Darren Kitchen

    Darren Kitch

    3 EKİM 2011
  • Ryan Ha

    Ryan Ha

    9 NİSAN 2006