2017-08-12 3 views
4

Je veux acheminer vers un chemin particulier lorsque le bouton retour sera cliqué dans le navigateur.Angulaire 4 - Comment acheminer vers un composant particulier lorsque vous appuyez sur le bouton de retour?

J'essayais l'extrait de code suivant. Mais il change l'URL de l'URL souhaitée juste un instant, puis achemine vers l'URL réelle précédente.

constructor(location: PlatformLocation, private router: Router) { 
    location.onPopState(() => { 
     router.navigate(['/home']); 
    }); 
} 
+2

La question devrait être: pourquoi je veux changer un comportement à ce que les utilisateurs sont habitués, car tous les appareils ont un certain comportement. Comme, voulez-vous savoir que sur google.com lorsque vous actualisez votre recherche, cela vous amène à votre page Gmail? – Vega

+0

En fait, je veux construire une webapp angulaire qui ressemble à une application Android (en utilisant webview). J'ai donc besoin de déclarer explicitement l'événement de presse de la touche retour. – aniket7824

+0

Si vous voulez une application Android puis vous faites une application native Android, lorsque vous faites une application angulaire, il devrait ressembler à une application Web qui pourrait être exécuté dans un appareil mobile. C'est tout. Ne pas réinventer la roue et ne pas confondre l'utilisateur. – Vega

Répondre

1

J'ai trouvé la solution d'une manière différente et l'utilisation de JavaScript. Supposons que je suis actuellement dans "/ menu" et que je veuille naviguer vers "/ home" quand le bouton de retour sera pressé. Vérifiez l'extrait de code suivant.

ngOnInit() { 
window.history.pushState({} , 'Home', '/home'); 
window.history.pushState({} , 'Menu', '/menu'); } 

Ici, je pousse deux états à l'intérieur window.history ngOnInit(). Tout d'abord, l'URL (/home) Je veux visiter sur la touche retour de presse, puis l'adresse URL actuelle (/menu).

Cela fonctionne bien et j'avais réalisé ce que je voulais.

0

Je recommande de mettre un auditeur sur le haut niveau comme:

@HostListener('window:popstate', ['$event']) 

et faire

router.navigate(['/home']); 

intérieur.

+0

Je me demandais, dans ce cas, comment empêcher la navigation du routeur? –

+0

Le même problème est ici aussi. @PankajParkar a souligné à juste titre qu'il n'empêche pas la navigation du routeur. – aniket7824