2017-01-18 10 views
8

Wyświetlam listę przedmiotów, które można kliknąć, aby przejść do następnej trasy. Możesz również kliknąć wyskakujące okienko na tej stronie. Jeśli klikniesz na wyskakujące okienko, a następnie klikniesz na jeden z elementów, które chciałbym zniszczyć wyskakujące okienko przed wyświetleniem następnej trasy.Jak zamknąć wyskakujące okienko przed przejściem do następnej lokalizacji? (Angular 2)

onSelect(id) { 
    if (this.router.url.includes('popup')) { 

     let p = Promise.resolve(() => this.closePopup()) 
     p.then(() => this.router.navigate(['/', id])) 

    } else { 

     this.router.navigate(['/', id]) 

    } 
    } 

closePopup() { 
    this.router.navigate([{outlets: {popup: null}}]) 
    } 

ja naprawdę nie rozumiem obietnic, więc nie jestem pewien, pisałem go w odpowiedniej strukturze, ale ten kod nie działa, jak to zawsze przejść do następnej trasy z popup nadal wewnątrz adresu URL. Próbowałem zrobić to w tej samej strukturze poza obietnicą, ale zawsze będzie nawigował do: id z (popup) nadal w adresie URL.

Próbowałem również: this.router.navigate(['/', id, {outlets: {popup: null}}]).

Czy istnieje funkcja routera, która umożliwia całkowite przepisanie adresu URL? Czy istnieje sposób, aby usunąć wyskakujące okienko z adresu URL przed przejściem do: id.

Problem z nadzieją jest jasny - pomoc jest doceniana!

Odpowiedz

0

Na urządzeniu GitHub znajduje się plik bug report dotyczący tego zachowania.

Zgodnie z tym, powinien działać this.router.navigate([{ outlets: { popup: null } });.

Możliwe jest jednak jawne ustawienie adresu URL za pomocą this.router.navigateByUrl('/'), co powinno anulować ustawienie wszystkich nazwanych punktów sprzedaży.

Śledź problem GitHub, ponieważ został niedawno dodany do zaległości i może zostać naprawiony wkrótce w nadchodzącej wersji Angular.

Alternatywnie, można znaleźć innego możliwego obejścia w this issue:

this.router.navigate([this.route.parent.snapshot.params, {outlets: {popup: null}}]); 
Powiązane problemy