2016-06-06 9 views
0

Ich habe einen JSON, der mir die Arbeitserfahrung eines Benutzers liefert. Aber Land und Stadt ist in einem Codeformat (TR, DE etc.) zur Verfügung gestellt I ng-repeat bin mit ihnen wie dieseWie kann ich einen Wert innerhalb von ng-repeat nach der Wiederholung ändern?

in html passiert
<div ng-repeat="e in experiences"> 
    <span>{{e.Name}}</span> 
    <span ng-init="changeCodeToFullName(e.Country)">{{vm.CountryFullName[$index]}}</span> 
</div> 

I ng-init bin mit konvertieren Country Code zu voll Name. changeCodeToFullName ist ein von mir geschriebener eckiger Dienst. Ist das eine korrekte Methode? Wenn dies der Fall ist, kann ich nicht auf das Dom zugreifen, um den CountryFullName-Wert zu ändern. Ich habe versucht, auf sie in JS-Datei wie vm.CountryFullName[0]="TEST" zuzugreifen, aber es hat nicht funktioniert. Ich muss e.Country-Variable nach verwenden, daher kann ich den ursprünglichen .e.Country-Wert nicht ändern.

Wie kann ich auf eine Variable innerhalb von ng-repeat zugreifen, nachdem ng-repeat abgeschlossen wurde?

Antwort

1

Wie über eine benutzerdefinierte mit filter:

<div ng-repeat="e in experiences"> 
    <span>{{e.Name}}</span> 
    <span>{{e.Country | changeCodeToFullName}}</span> 
</div> 

angular.module('App').filter('changeCodeToFullName', function(YourService) { 
    return function(country) { 
     return YourService.getFullCountryName(country) 
    } 
}) 

Hier ein Beispiel: http://codepen.io/rustydev/pen/YWyqJB

+0

Ich habe Filter ausprobiert, aber ich sehe {} in html. Mein Filtercode ist dies: 'app.filter ('changeCountryCodeToFullName', function (Testservice) { return-Funktion (Länderkennung) { return testService.getCountryName (Länderkennung) .then (function (result) { console.log (222 , Ergebnis); Ergebnis zurückgeben; }) } }) 'Ich kann das Ergebnis in der Konsole sehen. – Sam

+0

Ich habe meine Antwort mit einem Beispiel aktualisiert – horizens

+0

Mein Dienst verwendet $ q promise. Weil ich diese Daten mit einer Web-API erhalte. Ich denke, das ist das Problem. – Sam

0

Dies ist eine Möglichkeit - aber dieser ngInit Wert wird nicht repariert, wenn die Liste aktualisiert wird. Warum formatiert werden nicht nur die Daten im JSON-Request-Response - wie zum Beispiel:

$http.get("json.json").success(function(data) { 
    $scope.exeriences = data.map(function(obj) { 
     //Format results; 
     if (obj.Country == "DE") { 
      obj.Country = "Germany"; //etc 
     } 
     return obj; 
    }); 
}); 
+0

ich kann nicht, weil die Liste es ist zu lang. Ich muss es dynamisch machen. Ich habe einen anderen Dienst, um Code zum vollen Namen zu ändern. Ich möchte diesen Service nutzen und die Liste wird nicht dynamisch aktualisiert. – Sam