Voici à quoi ressemblent les itinéraires et les composants:
routes.config
export const routes: RouterConfig = [
{ path: 'users', component: UsersComponent, canActivate: [AuthGuard] },
{ path: 'users/new', component: NewUserComponent },
];
new-user.component
addField(newName: string){
this.items.Push({
name: newName,
})
this._router.navigate(['/users'])
Angular2 est-il supposé actualiser la page sur router.navigate?
Quoi d'autre utiliser à la place de router.navigate pour éviter tout rafraîchissement de page?
Vous appelez probablement la fonction router.navigate
dans un événement click.
<button class="btn btn-default"
(click)="save()">Save</button>
Et la fonction de sauvegarde étant quelque chose comme
save() {
//Do stuff
this._router.navigate(['/users', { id: userId } ]);
}
Cela fonctionne sur les navigateurs IE11 et Edge, mais rechargerait l'application dans Chrome.
Cela est dû à une variable type
manquante dans l'élément button. Si le bouton se trouve dans un <form></form>
, Chrome utilisera "submit" comme valeur par défaut. Causer un formulaire soumettre lorsque le bouton est cliqué.
Il est préférable de toujours définir une type
lors de l’utilisation de l’élément button
Voir ici:
Donc changer le HTML pour
<button class="btn btn-default" type="button"
(click)="save()">Save</button>
Cela fonctionnera sur les 3 navigateurs.
Ma solution précédente fonctionne également (en renvoyant la valeur false, cela empêcherait l’action par défaut. A.k.a. soumettre le formulaire), mais je pense que celle ci-dessus est préférable.
Réponse obsolète mais conservée pour la postérité:
<button class="btn btn-default" (click)="save(); false">Save</button>
J'ai eu le même effet (actualisation de la page lors de la navigation vers la page de détails) en utilisant un simple lien <a href="/details/1"></a>
.. La solution consistait à utiliser le lien angulaire: <a [routerLink]="['/details', 1]"></a>
Je connais sa méthode simple, mais vous pouvez également définir ce code pour actualiser l'itinéraire en cas de réussite une fois l'opération terminée.
window.open ('utilisateurs', '_self');
Il va recharger et rediriger vers la page utilisateur.
Pour moi, fonctionne bien (à partir du code composant):
window.location.href = "/sth";
il recharge automatiquement la page dans une partie donnée.
Ceci couvre une situation hybride AngularJS/Angular. J'ajoute la réponse car cette question est l'un des meilleurs résultats lorsque vous recherchez des problèmes de rechargement de page de routeur angulaire dans Google. J'espère que cela fera gagner du temps à quelqu'un d'autre.
Dans mon cas, j'avais une configuration de route angulaire 2 très simple (en réalité 5) qui fonctionnait généralement sauf dans un cas où un lien d'une route à une autre entraînerait inexplicablement le rechargement d'une page. J'avais vérifié tous les suspects habituels, formulaire, bouton d'envoi, etc.
Il s'est avéré que quelque part dans un composant AngularJS qui était affiché au moment où le lien a été cliqué, il y avait un ng-include
. La documentation met en garde à ce sujet pour une raison, je suppose. Redistribuez le modèle afin que le ng-include
puisse être remplacé par un templateUrl
et que tout allait bien.