AngularJS utiliser une fonction dans un contrôleur de données de retour d'un service pour être utilisé en ng-repeat
Je suis en train d'utiliser une fonction dans un contrôleur de données de retour de sorte que je peux ré-utiliser la fonction dans l'application pour appeler les données ainsi que de l'actualiser de temps en temps.
Mon code semble correct, mais dans la pratique, les plantages du navigateur sur chaque charge.
Je suis en mesure de l'obtenir pour fonctionner en utilisant un E directive, puis de placer l'élément dans l'partielle, mais qui n'est pas accomplir ce dont j'ai besoin.
En fin de compte, je voudrais faire quelque chose comme ceci:
<div ng-repeat="user in getListUsers()">{{ user.somedata }}</div>
J'ai essayé diverses choses à faire fonctionner dans les tests, y compris en mettant l' $http dans le contrôleur, tous avec les mêmes résultats.
Si je assigner une variable dans la méthode de contrôleur au lieu de renvoyer les données, qui fonctionne, mais alors j'aurais besoin d'appeler la méthode dans le contrôleur, et je n'en veux pas à exécuter par défaut. Juste à la recherche de faire l'appel dans les modèles en cas de besoin.
Toute aide pour comprendre pourquoi cela ne fonctionne pas. Merci.
Voici ce que j'ai qui ne fonctionne pas...
elite.controller('UserController', function($scope, User){
$scope.getListUsers = function(){
User.listUsers().then(function(response){
return response.users;
});
}
});
elite.factory('User', function($http){
var User = {
getUser: function(id){
return $http.get('/user/' + id + '/settings').then(function(response){
return response.data;
});
},
listUsers: function(){
return $http.get('/user/').then(function(response){
return response.data;
});
}
}
return User;
});
Edit:
À l'aide de certaines des idées ci-dessous, je suis en mesure d'obtenir les fonctionnalités que je voulais, juste d'une manière différente. Fondamentalement, je veux que les données à charger à la demande, plutôt qu'à l'avant, que je suis en train de regrouper tous les Utilisateur de la logique dans ce contrôleur, et je ne veux pas la totalité des données de charge pour chaque utilisateur. Je suis à l'aide de $rootScope temporairement jusqu'à ce que je figure sur certains de portée les problèmes de succession, comme l'utilisation de $champ d'application.les utilisateurs se termine avec une valeur null dans le modèle. Je peux voir l'appel AJAX de revenir, mais vous ne savez pas où il va, mais c'est une autre question.
elite.controller('UserController', function($scope, $rootScope, User){
$scope.getListUsers = function(){
User.listUsers().then(function(response){
$rootScope.users = response.users;
});
};
});
Et dans un élément nav j'ai ceci:
<div ng-controller="UserController">
<a ng-href="/#user/list" ng-click="getListUsers()">user list</a>
</div>
J'ai vu que plus tôt, mais le problème se produit même si je n'utilise pas de ng-repeat. Par exemple, si je place la fonction entre parenthèses, comme {{ getListUsers() }} , le navigateur se bloque toujours au lieu de montrer l'objet.
OriginalL'auteur Jazzy | 2014-01-06
Vous devez vous connecter pour publier un commentaire.
C'est environ $digest, $regarder et ng-repeat. Vous pouvez trouver beaucoup de réponses par simple recherche sur google ou découvrez lien donné par Jsplaine.
En bref, votre getListUsers() renvoie une liste d'Utilisateurs à chaque fois qu'il est appelé. Cependant, chaque liste retournée est une nouvelle collection ( tableau ). Angulaire, ce qui signifie qu'il doit mettre à jour l'affichage de la liste sur la page. Après chaque mise à jour, Angulaire réellement vérifier quelques temps pour voir si la liste est stable ou non par appel getListUsers() la fonction de nouveau. Chaque fois angulaire constaté que la liste est différent, donc il continuer à mettre à jour la liste et continuer à appeler les getListUser fonction.
Pour résoudre ce problème, vous pouvez créer une variable contenant la liste des utilisateurs:
et également la fonction de mise à jour de la liste
Puis dans le ng-repeat directive
Où vous voulez recharger la liste, le simple appel de la reloadListUsers fonction .
La raison en est que la variable userList est utilisé dans la liaison à la place de l'appel de la fonction de l'expression, et il est stable une fois que la liste est chargé.
OriginalL'auteur David Lin
Il y a quelques problèmes. Vous êtes de retour d'une valeur d'une fonction anonyme qui est invoquée lorsque la promesse retourné à partir de $http.obtenez de l'appel est résolu. La valeur de retour de cette fonction ne sera pas la valeur retournée par getListUsers.
Aussi, vous faites référence à la réponse.les utilisateurs dans le contrôleur de rappel. C'est encore le raw objet de réponse. Vous mai ont pris pour référence de réponse.les données.les utilisateurs?
Essayez ceci:
});
Puis, liez-le dans la vue:
La ng-repeat directive ne va pas cracher éléments si les utilisateurs n'est pas défini ou vide.
OriginalL'auteur Joel Skrepnek