2015-04-29 27 views
6

ile sorgu parametresi geçirmek için nasıl:/aramaaşağıdaki javascript Verilen othwerwise fonksiyonu

$stateProvider 
    .state('search', { 
    url: '/search?query', 
}) 
; 

$urlRouterProvider.otherwise("search"); 

Ben

base_url?query=x 

Ben

base_url yolundan yönlendirilirler sayfayı erişmek

ancak sorgu parametresi kayboluyor.

Sorgu parametresini başka bir işlevle iletmenin bir yolu var mı?

cevap

8

a working plunker

yoktur UI-Yönlendirici burada yerli bir çözümü vardır.

otherwise "url" dizesi olmak zorunda değil, bu bir işlev olabilir.

bu Q eylem Check it & A:

How not to change url when show 404 error page with ui-router

kodu şöyle olabilir:

$urlRouterProvider.otherwise(function($injector, $location){ 
    var state = $injector.get('$state'); 
    state.go("search", $location.search()); // here we get { query: ... } 
    return $location.path(); 
}); 

$location.search() bize verecektir olabilir nesneyi, params gibi: { query: ... }. Biz

o here

+0

Bu etkin html5mode benim için çalışmaz. Ayrıca plunkr'da yorumlanmıştır. Lütfen html5enabled ile bir örnek getirebilir misiniz? İki kez yeniden yönlendirilirim. Ben console.log yazdırdım ($ location, $ location.path(), $ location.search()) ;. İlk kez "/" Object {vid: "Auto1"} ve sonra "/" Object {} –

+1

* Ben html 5 modunun hayranı ya da kullanıcısı değilim, ancak burada ayarlanmış sürüm sizsiniz: http: // plnkr.co/edit/yrfOXMeaCJEKt08ihw00?p=preview. Özetle: "mutlak" url'yi uygun şekilde dahil etmeyi unutmayın ... çünkü güvenli bir yerde yaşamıyoruz, güvenli yönlendirme yaptıktan sonra # ... –

+0

Geri dönüşü yazmaya gerek yok $ location.path() ;.Bu, state.go işleviyle halihazırda bir devlet yönlendirmesi yayınlarken ek bir durum yönlendirmesi tetikler. –

0

Sen hiç, enjektör ve $ state.go kapmak gerek yok edin ... götürün ve bu params ile arama devlet yönlendirir. otherwise yöntemine ilişkin argüman, 'un içinde parametresi bulunan bir URL yolu olabilir.

yüzden özel durumda, aşağıdaki kod = x

$urlRouterProvider.otherwise("/search?query=x"); 

Alternatif argüman bir URL yolu döndüren bir işlev olabilir base_url/search? Sorgusuna size yol açabilir. Hangi URL parametrelerine sahip olabileceğinden emin değilseniz, sadece $location parametrelerini almanız ve ardından URL benzeri dizgiye dönüştürmeniz ve geri göndermeniz gerekir.

$urlRouterProvider.otherwise(function($injector, $location) { 
    var params = $location.search() 

    // format params to 'p1=v1&p2=v2' style 
    var formatted = Object.keys(params).map(function(key) { 
     return key + '=' + params[key] 
    }).join('&') 

    return '/search?' + formatted 
}); 
İlgili konular