2017-01-27 2 views
6

Yönlendirici tarafından sunulan birden çok görünüm içeren tek bir sayfa uygulaması yapıyorum.Angular2 uygulamalarında nasıl gezinilir?

Okuduğum bilgilerin çoğu, location:Location ürününü bir hizmet olarak enjekte etmeyi söylüyor, ardından bir görüntüye geri dönmek için (click)='location.back' kullanın.

Belirli bir görünümden başlayıp geri tıklarsanız, uygulamadan çıkıp önceki web sitesine gidersiniz. Bunu, bir navigasyon yöntemi olarak kullanırken sık sayfa yeniden yüklüyorum. Bir ng2 uygulamasında navigasyon işlemek için geçmiş API veya başka bir yolu var mı?

+0

normal davranış gibi geliyor olabilir. Tarayıcının geriye gitmek için bir sayfa olmadığında nereye gitmesini bekliyorsunuz? UI'nizde çok açık olmayan bir "geri" bağlantısı kullanmak yerine, kullanıcıyı "ana ekran" olarak davranabilen bir ekrana götüren bir bağlantı ile değiştirebilir misiniz? Örneğin, kullanıcı belirli bir öğeyi görüntülüyorsa, bağlantı onları öğe listesine alabilir; Eğer bir menü şubesinin derinliklerine inerlerse, bağlantı onları ana menü öğesine vb. alabilirdi. – AngularChef

+1

Bunu yapabilirdim, ancak arka bağlantının farklı bir ana bilgisayara veya ana bilgisayar adına gidip gitmeyeceğini saptamanın herhangi bir yolu var mı? ? Her zaman navigasyonun kontrol paneline geri dönmesini istemiyorum, bazen başka bir sayfadan atlayacaklar. – userqwert

+0

Anladım. [CanDeactivate] (https://angular.io/docs/ts/latest/api/router/index/CanDeactivate-interface.html) bir kodu ** çalıştırmadan önce ** bir rotadan çıkmanıza izin verir, ama korkuyorum Sadece bir Rota yolundan diğerine, bir rotadan harici bir URL'ye giderken çalışır. – AngularChef

cevap

19

sizin gibi açısal ortak diğeri de konumu kullanabilirsiniz:

import {Location} from '@angular/common'; 
    constructor(private _location: Location){ } 
    goback(){ 
     this._location.back(); 
    } 
+1

Evet, yaptığım şey bu, ve ben de bu soruya yazdıklarım ... Uygulamayı kazara terk etmeyecek bir yol arıyorum. Burada bir goBack yöntemini bağlamanız gerekmez, şablondaki konum hizmetine doğrudan erişebilirsiniz. – userqwert

+0

evet, aşağıdaki gibi html kullanın: 'Back' ancak 'public _location: Location' yapın –

1

Kullanım Bu:

window.history.back(); 
+0

Bunun neden reddedildiğini bilmiyorum. Teknik olarak bu çalışır ... tercih edilen yöntem olmasa bile. – krummens

+0

Teşekkür ederiz @ krummens –

+0

Tam olarak, @ köşeli/platform tarayıcı modülünü kullandığınızda olağan durumda, @ açısal/ortak konum hizmetinin arka() yönteminin back() yönteminin tam olarak ne olduğu budur. Açısal yöntemin avantajı, daha genel olması ve Açısal tarafından desteklenen diğer platformlarda da çalışmasıdır. – Cito

0

faydalı

history: string[] = []; 

constructor(private router: Router) { 
    router.events 
     .filter(event => event instanceof NavigationEnd) 
     .subscribe(event => { 
      this.history.push(event.url); 
     }); 
} 

onBack() { 
    if (this.history.length > 1) { 
     // pop current page 
     this.history.pop(); 
     // pop previous page (later it will be added) 
     this.history.pop(); 
     window.history.back(); 
    } 
} 

onHome() { 
    window.location.replace(window.location.origin); 
}