À L'Aide De Résoudre Dans Angular2 Routes
Angulaire 1 ma config ressemble à ceci:
$routeProvider
.when("/news", {
templateUrl: "newsView.html",
controller: "newsController",
resolve: {
message: function(messageService){
return messageService.getMessage();
}
}
})
Comment utiliser les résoudre dans Angular2?
- Autant que je sache, cette fonctionnalité n'est pas encore mis en œuvre. Montre pour ce problème. Pour l'instant, vous pouvez essayer d'utiliser
@CanActivate
et@OnActivate
crochets (mais ce n'est pasresolve
fonctionnalité bien sûr). - Double Possible de Angular2 : obtenir parent routeur de données
Vous devez vous connecter pour publier un commentaire.
@AndréWerlang réponse était bonne, mais si vous voulez l'résolu données sur la page pour modifier lorsque le paramètre de route changements, vous devez:
Resolver:
Votre composant:
Basé sur @angulaire/routeur v3-bêta, ce sont les étapes requises.
Mettre en œuvre un programme de résolution qui renvoie un Observables ou une simple valeur:
Noter que dans le cas où vous retournez un observable, l'déballé valeur (le premier) sera disponible par le biais de
route.snapshot.data
.Si vous voulez observables lui-même à être disponibles, alors vous avez besoin de l'envelopper dans un autre Observable:
Ajouter le résolveur de votre itinéraire:
Enfin, fournir votre résolution de classe et de toute dépendance à l'amorçage ou de votre composant principal
providers
:Consommer de l'résolu de données à partir d'un ActivatedRoute exemple:
Rappelez-vous que l'instantané s'entend de la valeur à l'état d'exécution, à la fois dans la classe de composant et le résolveur de classe.
Les données ne peuvent pas être actualisées à partir des paramètres des mises à jour avec cette approche.
Plunker: http://plnkr.co/edit/jpntLjrNOgs6eSFp1j1P?p=preview
Matériel Source: https://github.com/angular/angular/commit/f2f1ec0#diff-a19f4d51bb98289ab777640d9e8e5006R436
import { HeroService } as heroSvc from './hero.service'
de la route et neresolve: { heroes: heroSvc.getHeroes() }
?hero
comme paramètre directement dans le constructeur?Comme alexpods l'a déjà mentionné, il ne semble pas être un "résoudre" en tant que tel. L'idée semble être que l'utilisation du cycle de vie des crochets que le routeur fournit. Ce sont:
Puis il y a @CanActivate. C'est un crochet spécial parce qu'elle est appelée avant que le composant est instancié. Ses paramètres sont
(next, previous)
qui sont les composants que vous êtes le routage et le composant que vous venez d' (ou null si vous n'avez pas l'histoire), respectivement.La chose que je n'ai pas compris encore est de savoir comment obtenir le résultat de la promesse dans votre onActivate - autres de les stocker sur votre prochaine pièce. C'est parce que onActivate est également invoqué avec prochaine et précédente et non le résultat de la promesse.
Je ne suis pas heureux avec cette solution mais c'est le mieux que je pouvais venir.
routerOnActivate
, pas que OnActivate peut être mis en œuvre pour retarder le chargement de modèle.messageService
? Je suis d'essayer d'utiliserInjector.resolveAndCreate()
. Apparemment, elle ne peut pas fournir de l'application de dépendances spécifiées dansbootstrap()
pour les services qu'il est en train de créer. Le résultat est "Pas de fournisseur pour Http", par exemple, ou d'autres choses de mon service l'exige.@CanActivate
?bootstrap
et l'utiliser pour l'injection. Voir ce plunker: plnkr.co/modifier/SF8gsYN1SvmUbkosHjqQ?p=previewhttps://angular.io/docs/ts/latest/api/router/index/Resolve-interface.html
"résoudre" a été ramené à la angular2 routeur, mais la documentation est rare.
Exemple:
ActivatedRoute
lequel vous devez injecter dans votre composant. L'résolu, les valeurs sont stockées sur la propriété:route.snapshot.data
. Moi aussi, je suis donnant sur résout pour le moment. Dans mon cas, je m'attendais à le résoudre pour arriver avant lacanActivate
méthode de routeur gardes, mais le garde toujours est appelé en premier 🙁Vous pouvez créer votre programme de résolution dans Angular2+ et de l'appliquer à l'routeur assez facilement. regardez-la ci-dessous, voici la façon de créer le programme de résolution Angulaire:
puis dans la config routeur:
et enfin dans votre composant: