Ich versuche, eine Funktion in einem Controller verwenden, um Daten zurückzugeben, so dass ich die Funktion in der App wieder aufrufen können die Daten sowie gelegentlich aktualisieren.AngularJS verwenden eine Funktion in einem Controller, um Daten von einem Dienst zur Verwendung in ng-repeat
Mein Code scheint korrekt, aber in der Praxis stürzt der Browser bei jedem Laden ab.
Ich bin in der Lage, es zu arbeiten, indem Sie eine E-Direktive verwenden und dann das Element in den Teil platzieren, aber das schafft nicht, was ich brauche.
Letztlich würde Ich mag so etwas tun:
<div ng-repeat="user in getListUsers()">{{ user.somedata }}</div>
ich verschiedene Dinge ausprobiert, um es in Tests zu arbeiten, einschließlich der $ http in der Steuerung setzen, die alle mit den gleichen Ergebnissen.
Wenn ich eine Variable in der Controller-Methode zuweisen, anstatt die Daten zurückzugeben, funktioniert das, aber dann müsste ich die Methode in der Steuerung aufrufen und ich möchte nicht, dass sie standardmäßig ausgeführt wird. Einfach nur den Aufruf in den Vorlagen bei Bedarf machen.
Jede Hilfe, herauszufinden, warum das nicht funktioniert, wäre großartig. Vielen Dank. Hier
ist, was ich habe das nicht funktioniert ...
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:
unten sind einige der Ideen verwenden, ich bin der Lage, die Funktionalität zu erhalten ich wollte, nur in ein anderer Weg. Grundsätzlich möchte ich, dass die Daten bei Bedarf geladen werden, eher im Vordergrund, da ich versuche, die gesamte Benutzerlogik in diesem Controller zu gruppieren, und ich möchte nicht, dass die vollständigen Daten für jeden Benutzer geladen werden. Ich verwende $ rootScope temporär, bis ich einige Scoping-Vererbungsprobleme herausgefunden habe, da die Verwendung von $ scope.users mit einem Null-Wert in der Vorlage endet. Ich kann sehen, dass der AJAX-Anruf zurückkommt, aber ich bin mir nicht sicher, wohin es geht, aber das ist ein anderes Problem.
elite.controller('UserController', function($scope, $rootScope, User){
$scope.getListUsers = function(){
User.listUsers().then(function(response){
$rootScope.users = response.users;
});
};
});
Und in einem nav-Elemente Ich habe dies:
<div ng-controller="UserController">
<a ng-href="/#user/list" ng-click="getListUsers()">user list</a>
</div>
Schauen Sie sich http://StackOverflow.com/Questions/12336897/How-to-loop-through-Items-returned-by-a-Function-with-ng-Repeat – jsplaine
Ich sah das früher, aber das Problem passiert auch wenn ich nicht ng-repeat verwende. Zum Beispiel, wenn ich die Funktion einfach in Klammern setze, wie {{getListUsers()}}, stürzt der Browser immer noch ab, anstatt das Objekt zu zeigen. – Jazzy