Cette question, parmi beaucoup d'autres, montre à utiliser Un J'ai beaucoup de contrôleurs, avec tous les itinéraires définis séparément dans chaque module ... à l'aide de N'y a-t-il pas une meilleure façon de faire: "Charger des données (à l'aide d'un service angulaire) avant que chaque contrôleur ne soit affiché"? J'ai besoin de l'application pour charger, ASYNC récupérer les données et j'utilise NG-Show avec certaines données Rootscope indiquant le chargement ou le modèle de contrôleur. J'ai essayé de le mettre dans aide? P> de niveau de contrôleur (code> résolve code> pour asynchronisation doit être chargé avant la démarrage d'une application. p>
résolution code> serait ridicule pour moi si elles dépendent tous des données em>. J'ai aussi des directives qui dépendent des données (recherche automatique, etc.). P>
app.run code>, mais je ne pouvais pas le faire fonctionner correctement ... tout ce qui est asynchrone dans ce bloc semble empêcher l'application. P>
3 Réponses :
Voici ce que j'ai fait. Je ne suis pas un grand fan de cette solution, mais c'est le meilleur que j'ai pu trouver jusqu'à présent.
Tout d'abord, vous pouvez avoir plusieurs puisque vous ne pouvez pas injecter les services d'application dans le bloc de configuration, j'ai créé un grand objet ancien dans un autre fichier contenant des raccourcis à mes services: P > résoudre code> dans chaque itinéraire, Comme: p>
app.resolves = (function(){
// Resolves allow us to use `deferred`s to only
// load our template after the data it requires
// has been provided by the server.
var resolve = {};
resolve.UserAccount =
['Users', function (Users) {
return Users.fetchActive();
}];
resolve.Posts =
['Posts', function(Posts) {
return Posts.getAllPosts();
}];
// Public API
// @param string name
return function (name) {
return resolve[name]
};
})();
N'y a-t-il pas un moyen de résoudre une "application"? Si j'ai 15 contrôleurs différents, je veux seulement spécifier un objet "résolution" une fois (app ... Résoudre: myData), pas le même bloc 15 fois.
Peut-être que vous pourriez essayer quelque chose comme ceci: jsfiddle.net/n99ez Je n'ai pas testé au-delà de ne pas être toutes les erreurs javascript. Votre fonction app.ResDUsers () code> doit renvoyer une promesse ou un objet avec chaque membre étant une promesse. Tant que c'est dans votre application Config directement après vos déclarations d'itinéraire, je penserais que cela ferait le tour.
En fait, essayez celui-ci: jsfiddle.net/jjehs Cela préservera les résolutions existantes sur un itinéraire. Assurez-vous simplement que vous les déclarez dans la syntaxe d'objet comme mon exemple de route.
J'aime ce dernier!
Je pense que, puisqu'il n'y a pas de moyen évident de faire de la configuration de résolution de niveau d'application, la meilleure chose à faire est de modifier réellement les fonctionnalités Je me débats avec ce même problème maintenant. Je vais essayer de faire un code générique / réutilisable ici et poster ma solution très bientôt sur GitHub. Je vais essayer de mettre à jour cette réponse avec un exemple correct ici aussi. P> $ routirovider code> à l'aide d'un décorateur. De cette façon, vous pouvez vérifier si un
résolution code> config est défini sur chaque voie d'application et ajoutez / fusionner une promesse de résolution spéciale qui chargera des données asynchronisées ou de continuer avec les données nécessaires, avec le bonus d'avoir un centre central. pointez pour tester ou modifier lorsque vous avez besoin. p>
Je sais que cette question est vieille, mais comme il n'y a pas de réponse acceptée, ni propre, je tente de résoudre cela aussi.
L'absence d'un état de résolution par application me dérangeait depuis un moment et c'est la solution que j'ai finalement proposée: http://jsfiddle.net/gabrielcatalin/cvyq0oys/ p>
En bref, j'ai créé un module angulaire (décorateur), qui prend en charge 2 autres méthodes: Voici comment une implémentation sera la suivante: p> et le code HTML: p> espère voir des commentaires de vous les gars! p> p>