Quelle est la meilleure pratique pour faire un appel AJAX dans Angular.js?
J'ai été la lecture de cet article: http://eviltrout.com/2013/06/15/ember-vs-angular.html
Et il a dit,
En raison de l'absence de conventions, je me demande combien Angulaire des projets
s'appuyer sur les mauvaises pratiques telles que les appels AJAX directement dans les contrôleurs?
En raison de l'injection de dépendance, sont les développeurs de l'injection de routeur
les paramètres dans les directives? Êtes novice AngularJS les développeurs à
la structure de leur code d'une manière qu'une expérience de développeur AngularJS
croit est idiomatiques?
Je suis en train de faire $http
des appels à partir de mon Angular.js le contrôleur. Pourquoi est-ce une mauvaise pratique? Quelle est la meilleure pratique pour faire des $http
appelle alors? et pourquoi?
- +1 pour la référence à post intéressant de comparer ember et angularjs.
- Je me suis demandé la même chose au sujet de Angulaire Meilleures Pratiques
- Aussi un complément également vérifier l'API pour les choses que vous avez manqué: docs.angularjs.org/api/ng/service/$http
Vous devez vous connecter pour publier un commentaire.
EDIT: Cette réponse a été principalement axées sur la version 1.0.X. Pour éviter toute confusion, il est modifié pour refléter la meilleure réponse pour TOUTES les versions actuelles de Angulaire d'aujourd'hui, le 2013-12-05.
L'idée est de créer un service qui retourne une promesse aux données renvoyées, puis appelez dans votre contrôleur et de gérer la promesse là pour remplir votre $champ d'application de la propriété.
Le Service
Le Contrôleur:
Poignée de la promesse de
then()
méthode et d'obtenir les données hors de lui. Définir le $champ d'application de la propriété, et de faire tout autre chose que vous devez faire.En Vue Promesse De Résolution (1.0.X uniquement):
Angulaire 1.0.X, la cible de l'origine de réponse ici, promesses d'obtenir un traitement spécial par la Vue. Quand ils n'en résolvent, leur valeur résolue sera lié à la vue. Cela a été déprécié en 1.2.X
.then
et.success
? Ne.then
englober à la fois les erreurs et les succès?.then
est une fonction réelle de l'retourné promesse..success
est une fonction ajoutée à la promesse faite par$http
. La principale différence est tout ce qui est retourné à partir de la première fonction de la.then
sera résolu pour la promesse, il ne fonctionne pas de cette façon avec.success
.$scope.foos
propriété dans un modèle. Si vous utilisez la même propriété en dehors d'un modèle (par exemple dans une autre fonction), l'objet stocké n'est encore qu'une promesse d'objet..then()
de la promesse et de mettre la valeur dans le $scope...myService.getFoos().then(function(value) { $scope.foos = value; });
module.controller('MyCtrl', ['$scope', 'myservice', function($scope, myService) { });
vsmodule.controller('MyCtrl', function($scope, myService) {});
... Donc ce peut-être besoin d'être mis à jour.La meilleure pratique serait de faire abstraction des
$http
appel à un "service" qui fournit les données de votre contrôleur:L'abstraction de l'
$http
appeler comme cela vous permettra de réutiliser ce code sur plusieurs contrôleurs. Ceci est nécessaire lorsque le code qui interagit avec ces données devient de plus en plus complexe, peut-être que vous souhaitez traiter les données avant de l'utiliser dans votre contrôleur, et de mettre en cache le résultat de ce processus de sorte que vous n'aurez pas à passer du temps à re-traitement.Vous devriez penser à un "service" comme une représentation (ou Modèle) de données que votre application peut utiliser.
Accepté la réponse a été de me donner la
$http is not defined
d'erreur donc j'ai dû le faire:La principale différence étant cette ligne:
J'ai mis une réponse à quelqu'un qui voulait un totalement générique de service web dans Angulaire. Je vous recommande juste de le brancher et il prendra soin de tous vos appels de service web sans avoir besoin de code vous même. La réponse est ici:
https://stackoverflow.com/a/38958644/5349719