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

  • MagmaRhino

    MagmaRhino

    16 Temmuz 2011
  • PlugResearch

    PlugResearch

    22 Mart 2006
  • Top Gear

    Top Gear

    27 Mart 2006