AngularJS est-il uniquement destiné aux applications monopages (SPA)?

201

Nous recherchons des options pour construire le front-end d'une application que nous créons et essayons d'évaluer un outil qui fonctionnera pour nous et nous donnera la meilleure plate-forme pour aller de l'avant.

Il s'agit d'un projet Node.js. Notre plan initial était d'utiliser Express et de suivre cette voie, mais nous avons décidé qu'avant de lancer cette étape, il serait peut-être préférable de revoir ce qui existe. Notre application comporte plusieurs domaines qui, selon nous, ne correspondent pas au modèle d'une seule page, car ils sont liés du point de vue de l'application, mais pas du point de vue.

Nous avons vu quelques-uns des cadres que nous pourrions utiliser pour développer le client comme Backbone.js , Meteor , etc. et aussi AngularJS.

Cela peut être une question assez évidente, mais nous ne pouvons pas sembler déchiffrer si AngularJS est purement pour une application d'une seule page ou s'il peut être utilisé pour des applications de plusieurs pages comme Express par exemple.


MISE À JOUR 17 juillet 2013 Pour garder les gens informés, je mettrai à jour cette question au fur et à mesure que nous avancerons. Nous allons tout construire ensemble pour le moment, et nous verrons à quel point cela fonctionne. Nous avons contacté quelques personnes qui sont plus qualifiées avec AngularJS que nous et avons posé la question concernant le fractionnement des applications plus grandes qui partagent le contexte, mais qui peuvent être trop volumineuses en travaillant sur une seule page.

Le consensus était que nous pouvions servir plusieurs pages statiques et créer des applications AngularJS qui ne fonctionnent qu'avec ces pages, créant efficacement une collection de SPA et reliant ces applications entre elles à l'aide d'une liaison standard. Maintenant, notre cas d'utilisation est très spécifique car notre solution a plusieurs applications, et comme je l'ai dit, nous allons d'abord essayer la base de code unique et l'optimiser à partir de là.

MISE À JOUR 18 juin 2016 Le projet est tombé d'une falaise, nous n'avons donc jamais pu en faire trop. Nous l'avons repris récemment, mais n'utilisons plus angular et utilisons React à la place. Nous utilisons toujours l'architecture décrite dans la mise à jour précédente, où nous utilisons des applications express et autonomes, par exemple, nous avons un /chatitinéraire dans express qui sert notre application de chat React, nous avons un autre itinéraire /projectsqui sert l'application de projets et bientôt. La façon dont nous le regardons est que chaque application est une racine agrégée en termes de fonctionnalités, elle doit être autonome pour être considérée comme une application en soi. Techniquement, toutes les informations sont disponibles, leur express juste basique et quelle que soit la saveur de la construction d'applications côté client que vous souhaitez utiliser.

Modika
la source
5
Alors comment ça s'est passé? Je suis en train d'essayer de comprendre comment déplacer une application ASP.NET de plus de 50 pages vers une application HTML + Javascript + REST pure et je ne comprends vraiment pas comment cela fonctionnerait en tant que SPA.
Greg
1
Nous avons dû passer à autre chose. D'après les discussions que nous avons eues et que nous aurons à nouveau alors que cela démarre à nouveau, c'est que SPA peut être un rouage très concentré dans une machine beaucoup plus grande. Donc, en traduisant notre instance en la vôtre (nous utilisions un nœud pur avec express) si vous vouliez rester dans une pile familière (.Net), vous pourriez utiliser MVC comme échafaudage et utiliser angulaire dans les vues pour ajouter les éléments dynamiques (chaque fonctionnalité) . sauf si vous pouvez condenser votre application, la mise en œuvre de 50 pages de logique en une seule page pourrait s'étouffer.
Modika
1
Cela fait de chaque section (c'est-à-dire utilisateurs, actualités, produits, etc.) un SPA à part entière, mais collectivement, elles forment votre application.
Modika
1
Super merci. Y a-t-il un codage spécifique qui doit être fait pour lier les différents SPA ensemble? Ou simplement des liens réguliers?
Greg
1
@Greg, d'après nos connaissances limitées jusqu'à présent, car ce sont essentiellement des applications à part entière, la liaison standard fonctionnerait, évidemment ce ne sera probablement pas simple car cela et une certaine forme de persistance (cookies, stockage local) sera nécessaire pour persister. informations partagées comme peut-être et identité ou profil si l'application est à l'origine d'une forme de connexion. Nos applications seront étroitement liées à notre API et comme nous construisons une application de confiance, nous utilisons oauth pour protéger chaque demande, je pense que Trello fait quelque chose de similaire, mais je peux me tromper.
Modika

Réponses:

216

Pas du tout. Vous pouvez utiliser Angular pour créer une variété d'applications. Le routage côté client n'est qu'un petit morceau de cela.

Vous disposez d'une grande liste de fonctionnalités qui vous seront utiles en dehors du routage côté client:

  • liaison bidirectionnelle
  • modèle
  • formatage des devises
  • pluralisation
  • contrôles réutilisables
  • Gestion api RESTful
  • Manipulation AJAX
  • modularisation
  • injection de dépendance

C'est fou de penser que tout cela "ne peut être utilisé que dans une application d'une seule page". Bien sûr que non ... c'est comme dire "Jquery est uniquement pour les projets avec animations".

Si cela correspond à votre projet, utilisez-le.

Ben Lesh
la source
42
Un autre point à mentionner est que Angular n'a même pas besoin d'être utilisé pour des pages complètes - il peut être intégré dans un système existant pour créer des composants, c'est-à-dire un widget complexe ou un plugin dans une application héritée.
Alex Osborn
2
@Blesh, merci pour la réponse, cela a du sens, mais ce que nous avons du mal à trouver, c'est "comment" nous l'utilisons pour créer des applications multi-pages, c'est pourquoi la question a été publiée, c'est en effet une question différente, donc votre réponse a été accepté mais par exemple pouvons-nous utiliser angular.js avec express.js ou est quelque chose comme ça juste une perte de temps et plus de complication.
Modika
Angular avec Express est presque idéal! Il est vraiment très facile de créer une API RESTful avec Express que vous pouvez utiliser à partir de vos applications Angular. API Google NodeJS Express RESTful et services $ resource et $ http d'Angular. Après cela, commencez simplement à prototyper et à jouer avec. Je pense que vous pourriez trouver que vous pensez trop / vous inquiétez trop du "COMMENT" une fois que vous voyez à quel point ils fonctionnent bien ensemble.
Ben Lesh
@Blesh, désolé d'être revenu en retard. Nous avons déjà une API REST / Hypermedia construite à l'aide de Restify, je suppose que nous devons trouver un moyen astucieux de lier les "applications" distinctes créées ensemble d'une manière ou d'une autre, examinerons cela et mettra probablement à jour la question à un moment donné.
Modika
@Modika avez-vous pu trouver de bonnes ressources ou avez-vous de bonnes idées pour les applications multi-pages?
dre
16

J'ai d'abord eu du mal avec le "comment" avec Angular. Puis un jour, il m'est apparu: "C'est toujours du javascript". Il y a un tas d'exemples sur les tenants et les aboutissants d'Angular (l'un de mes favoris avec le livre https://github.com/angular-app/angular-app ). La plus grande chose à retenir est de charger les fichiers js comme vous le feriez dans n'importe quel autre projet. Tout ce que vous avez à faire est de vous assurer que les différentes pages référencent le bon objet angulaire (contrôleur, vue, etc.) et que vous êtes éteint et en cours d'exécution. J'espère que cela a du sens, mais la réponse était si simple que je l'ai négligée.

Ron
la source
6

Peut-être que mon expérience sera utile à quelqu'un. Nous divisons notre projet de façon logique. Un SPA que nous utilisons pour le flux, un autre pour travailler avec la carte, un autre pour modifier un profil utilisateur, etc. Par exemple, nous avons trois applications: flux, utilisateur et carte. Je l'utilise dans les URL séparées, comme ceci:

https://host/feed/#/top/
https://host/user/#/edit/1/
https://host/map/favorites/#/add/

Chacune de ces applications possède ses propres mappages de routage local entre les états de l'application. Je pense que c'est une bonne pratique car chaque application ne fonctionne qu'avec son propre contexte et ses propres dépendances de charge dont elle a vraiment besoin. En outre, c'est une très bonne pratique pour les processus de débogage et d'intégration.

En effet, vous pouvez très facilement faire un mix d'applications SPA, par exemple le flux sera url avec l'application angularjs, l'application utilisateur avec les reactjs et mappera vers l'application backbone.js.

En réponse à votre question:

Angular non seulement pour les SPA, Angular joue bien et rapidement pour les applications SPA, mais personne ne se soucie de créer une application MPA d'une variété d'applications SPA. Mais en pensant à votre architecture d'URL, n'oubliez pas la disponibilité SEO de vos applications.

Je soutiens également l'idée:

Quelle est la différence entre un projet et une application? Une application est une application Web qui fait quelque chose - par exemple, un système Weblog, une base de données d'archives publiques ou une simple application de sondage. Un projet est une collection de configurations et d'applications pour un site Web particulier. Un projet peut contenir plusieurs applications. Une application peut être dans plusieurs projets.

theodor
la source
3

Si tout ce dont vous avez besoin est de quelques pages avec la liaison de données client, j'irais avec Knockout et Javascript Namespacing.

Knockout est génial, surtout si vous avez besoin d'une compatibilité descendante simple et que vous avez des pages assez simples. Si vous utilisez des composants tiers, les liaisons personnalisées de Knockout sont simples et faciles à utiliser.

L'espacement de noms Javascript vous permet de garder votre code séparé et gérable.

var myCo = myCo || {};
myCo.page = {
    init: function(){ ... },
    ...
}

Et dans une balise de script après le chargement de vos autres scripts

<script>
    myCo.init();
</script>

La clé est que vous utilisez l'outil que vous voulez quand vous en avez besoin. Besoin d'une liaison de données? Knockout (ou ce que vous voulez). Besoin de routage? sammy.js (ou ce que vous voulez).

Le code client peut être aussi simple ou compliqué que vous le souhaitez. J'ai essayé d'intégrer Angular dans un site très compliqué avec un framework propriétaire existant, et c'était un cauchemar. Angulaire est idéal si vous commencez frais, mais il a une courbe d'apprentissage et vous enferme dans un flux de travail très serré. Si vous ne le suivez pas, votre code peut s'emmêler très rapidement.

Fred
la source
1

Je dirais que Angular est exagéré si vous cherchez simplement à développer un SPA. Bien sûr, si vous êtes déjà à l'aise avec cela, allez-y. Mais si vous êtes nouveau dans le cadre et n'avez besoin que de développer un SPA, j'irais avec quelque chose de plus simple avec un certain nombre de ses propres avantages. Je recommande de regarder dans Vue.js ou Aurelia.io .

Vue.js utilise une liaison de données bidirectionnelle, MVVM, des composants réutilisables, simples et rapides à récupérer, moins de code à écrire, etc. Il combine certaines des meilleures fonctionnalités d'Angular et React.

Aurelia.io , en toute honnêteté, je ne sais pas grand-chose. Mais j'ai jeté un coup d'œil et cela semble une alternative intéressante, similaire à ce qui précède.

Liens:
https://vuejs.org/
http://aurelia.io/

Filipb
la source