Play Framework 2.1 - AngularJS routage meilleure solution?
Je suis en train de travailler mon chemin à travers le tutoriel AngularJS. Angulaire utilise ses propres JS mécanisme de routage pour permettre single page apps. Un exemple de fichier de routage Angulaire ressemble à ceci:
angular.module('phonecat', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/phones', {templateUrl: '/partials/phone-list', controller: PhoneListCtrl}).
when('/phones/:phoneId', {templateUrl: 'partials/phone-detail', controller: PhoneDetailCtrl}).
otherwise({redirectTo: '/phones'});
}]);
Je suis en train d'essayer de trouver un bon endroit pour stocker mes partiels (Angulaire spécifique des fichiers HTML). Idéalement, j'aimerais que la capacité du modèle à Jouer (c'est à dire comme *.scala.html les fichiers). Je peux le faire à l'aide d'un d'un parcours de jeux fichier comme ceci:
GET /partials/phone_index controllers.Application.phone_index
En gros, j'ai des partiels/à l'action d'un contrôleur comme ceci:
def phone_index = Action {
Ok(views.html.partials.phone_index())
}
La solution, je suis à la recherche est une combinaison de deux idéaux:
- Je voudrais avoir une sorte de cartographie qui me permet de visiter n'importe quel fichier sous /partielle/* et récupérer le fichier partiel.
- Je souhaite le remplacement d'une route à une partielle, donc je PEUT utiliser un contrôleur d'action pour remplir dynamiquement avec les données (rare).
Des idées?
Vous devez vous connecter pour publier un commentaire.
Quand j'ai essayé quelque chose de similaire, je suis venu à la conclusion qu'il est préférable de le casser en 2 parties:
public
dossier (quelque chose comme/public/angular/
) et utiliser la valeur par défaut AngularJs pour cartographier les modèlesJe sais que ça n'a pas l'air grand et n'a pas vraiment répondre à votre question sur la façon de le faire, mais en essayant de lier les deux cadres peut être problématique en raison de la façon dont les modèles et les url sont mappés dans Angulaire, et la prestation sera très petits, tout changement implique beaucoup de travail, supprimant ainsi le sans doute le principal avantage de Jouer et Angulaire, développement rapide.
Cela vous permet également de séparer les préoccupations mieux, si votre projet se développe peut être important que vous pouvez simplement prendre le AngularJS code de loin comme une application autonome de la connexion à un backend, et il fonctionne parfaitement.
Vous pouvez voir un exemple de code de ce que j'ai dit (basé sur la TODO tutoriel AngularJS) dans ce Github. Je vous préviens, le code n'est pas trop agréable, mais devrait vous donner une idée et en bonus, vous montre comment intégrer le Jasmin en Jeu, pour AngularJS tests unitaires.
L'éventuelle des semences (https://github.com/angyjoe/eventual) est encore une autre façon de construire un Jeu + AngularJS app. Le code est une amie et bien documenté.
Disclosure: I am author of said tool, and it was written in response to this question
.Ce ne sera pas répondre directement à votre question, mais j'ai trouvé ceci pour être la meilleure façon de construire le Jeu + Angulaire apps:
https://github.com/typesafehub/angular-seed-play
Oui, il est possible de créer de serveur-côté méta-modèles de modèles de. Cette offre des capacités uniques, comme les deux méthodes ne se chevauchent pas complètement. Il y a aussi beaucoup de place pour la confusion, afin d'être sûr que vous savez pourquoi vous êtes à l'écriture d'une pièce de bloc au lieu d'une Angulaire de la directive.
Si vous devez ou non faire il reste une question ouverte; cela dépend vraiment si vous avez réellement besoin d'avoir accès à des informations sur le serveur dans vos templates. Un exemple de là où je pense qu'il serait nécessaire et approprié serait pour la mise en œuvre du contrôle d'accès à votre point de vue.
Maintenant pour répondre à votre question. Le problème est résolu par l'in-lining les partiels au lieu d'essayer de fournir un itinéraire pour eux d'être chargés à la demande. Voir http://docs.angularjs.org/api/ng.directive:script.
Voici ce que le modèle ressemble à:
Et de l'app:
Il suffit d'inclure ce helper:
Et assurez-vous de l'utiliser à l'intérieur de la racine de la portée angulaire de votre application.
Pour la question #1 vous pouvez introduire une route comme ceci:
Puis dans votre contrôleur, vous auriez besoin de la carte d'afficher le nom réel:
Vous pourriez vouloir rendre les modèles de paresseux ou d'exiger que la demande d'être présent, alors vous devriez probablement faire quelque chose comme ceci:
Votre action devrait ressembler à quelque chose comme ceci:
Si vous voulez un contrôleur spécifique de la méthode pour un certain itinéraire (question #2) vous ajoutez simplement un itinéraire ci-dessus la dynamique:
Je pense vraiment que ce n'est pas une très bonne idée, même s'il provient d'une respectueusement esprit, en effet.
Je pense que c'est une très bonne pratique de laisser chaque pense que par défaut (convention over configuration principe), ce qui signifie pour moi que nous avons sans doute plus d'intérêt à garder chaque Paradigmes (Lecture et AngularJS), séparés l'un ou les deux pourraient évoluer dans le proche ou le lointain avenir, ce qui aura à son coût pour la maintenance du code.
Le deuxième point très important est la capacité de test, si vous mélangez à la fois toutes les technos, vous vous retrouverez avec un mélange de venir avec réelle bonne couverture de tests dans les deux côté de votre application.
Cheers
Cela pourrait ne pas répondre à la question exactement, mais vous pouvez essayer de suivre ce projet, comme il semble bon exemple à construire Lecture/scala/Angulaire apps:
https://github.com/lashford/modern-web-template#master
http://typesafe.com/activator/template/modern-web-template