So habe ich ein bisschen eine Verwechslung mit Winkel verspricht.Suchen und Rückholeinzelteil in Angular latenten Versprechen
Ich habe einen Dienst, eine Liste der Benutzer zu speichern
.service('user', ['$q','$http', function ($q, $http) {
var services = {};
var _def_userLsit = $q.defer();
$http.get('/api/acc/getlist').then(function (data) {
_def_userLsit.resolve(data);
})
services.getUserListQ = function() {
return _def_userLsit.promise;
}
return services;
}])
, nachdem es eingespritzt wird, ich meine Liste in einem Controller wie folgt laden:
user.getUserListQ().then(function (promise) {
$scope.userHelper.userList = promise.data;
});
hier kein Problem, bekam die json im $ scope, dann machen die Beobachter ihre Arbeit gut.
Hier ist die Json Format für die Frage vereinfacht:
obj 1 {id = 4, Username = "foohuman" $$ HashKey = "object: 14" } obj 2 {id = 444, Benutzername = "barhuman", $$ hashKey = "Objekt: 22"}
Aber ich möchte auch einen Benutzernamen nach ID, und ich muss das mehrmals (abhängig von der Post-Anzahl) ausführen.
Also ist meine Frage hier, wie kann ich den Namen eines Benutzers wie ein Funktionsanruf von dieser versprochenen Liste zurückgeben.
wie eine normale Funktion tun würde, wie folgt aus:
$scope.getUserById = function( id){
return "foo";
//some magic needed here
}
Wenn ich die userHelper.userList Trog nur wiederholen, es könnte leer sein, wenn es noch zu früh ausgeführt wird, so muß ich ein Versprechen, dass Trog laden , aber laden, iterieren durch, dann eine Zeichenfolge zum $ scope hinzuzufügen, ist nicht die beste Option, da sie mehrere Male laufen kann, so dass sie sich gegenseitig überschreiben kann, ziemlich unvorhersehbar, wenn ich sie in einer einzigen Variable abspeichere.
Also jede Idee, wie kann ich eine nette einfache Zeichenfolge von der ID zurückgeben, und kein Versprechen?
EDIT: Ok, so kann ich nicht wirklich eine nette Zeichenfolge zurückgeben, weil es eine Art Rückruf sein muss, aber ich kann die Daten aus dem Versprechen verarbeiten, so dass ich am Ende Benutzerdaten in ein Array wie geladen dies:
user.getUserListQ().then(function (promise) {
var uArr = [];
angular.forEach(promise.data, function (value, key) {
uArr[value.id] = value.userName;
})
$scope.userHelper.uArr = uArr;
});
und in den hTML-Code kann ich kühn {{userHelper.uArr[taskData.tOwner]}}
schreiben.
Vermeiden Sie die [latenten Antipattern] (http://stackoverflow.com/q/23803743/ 1048572)! – Bergi