2013-05-21 18 views
78

Wie kann ich vermeiden, dass die {{f = ...}} Anweisung in der dritten Zeile den Inhalt von forecast[day.iso] ausdruckt?AngularJS: Wie setze ich eine Variable innerhalb einer Vorlage?

Ich möchte vermeiden, forecast[day.iso].temperature usw. für jede Iteration zu verwenden.

<div ng-repeat="day in forecast_days"> 
    {{$index}} - {{day.iso}} - {{day.name}} 
    {{f = forecast[day.iso]}} 
    Temperature: {{f.temperature}}<br> 
    Humidity: {{f.humidity}}<br> 
    ... 
</div> 
+2

Es ist vielleicht nicht eine Antwort sein, aber nützlicher Tipp ist die Verwendung {{f = Prognose [day.iso]; ""}} wie es wäre, Nichts auf der Ansicht drucken. –

Antwort

160

Verwenden ngInit: http://docs.angularjs.org/api/ng.directive:ngInit

<div ng-repeat="day in forecast_days" ng-init="f = forecast[day.iso]"> 
    {{$index}} - {{day.iso}} - {{day.name}} 
    Temperature: {{f.temperature}}<br> 
    Humidity: {{f.humidity}}<br> 
    ... 
</div> 

Beispiel: http://jsfiddle.net/coma/UV4qF/

+27

Wenn Sie mehr als eine Variable wollen, trennen Sie sie einfach durch Semikolon ';' – bentzy

+0

Tipp für Uneingeweihte ... Abhängig von Ihrer Vorlagenstruktur können Sie alle Datensätze erhalten, die nur den letzten Wert Ihrer Variablen anzeigen (in meinem Fall hat Angular die Substitutionen bei einem nachfolgenden Digest-Zyklus aktualisiert, da sie alle gebunden sind zum selben Ausdruck)! Um diese Situation zu bekämpfen, könnten Sie die Variable als eine Eigenschaft des aktuellen Datensatzes zuweisen, der iteriert wird (falls dies für Ihren Anwendungsfall sinnvoll ist). Im obigen Beispiel würde dies zu "ng-init =" day.f = prognose [day.iso] "' –

24

Es ist not the best answer, aber es ist auch eine Option: da Sie mehrere Ausdrücke verketten kann, aber nur die letzte gerendert , können Sie Ihren Ausdruck mit "" beenden und Ihre Variable wird ausgeblendet.

So könnten Sie die Variable mit definieren:

{{f = forecast[day.iso]; ""}} 
+0

Dies ist eine dokumentierte Funktion? –

+0

@DanielF, konnte ich nicht finden. Ich sah [das] (http://stackoverflow.com/questions/16665319/how-to-set-a-variable-inside-of-a-template#comment54563800_16665319) Kommentar, testete die Idee, mochte es und entschied sich dazu fügen Sie als Antwort hinzu, da es mehr Sichtbarkeit hat und schwerer zu verlieren ist. – Zanon

+0

@DanielF, fand gerade diese hohe Abstimmung [Antwort] (http://Stackoverflow.com/a/28432472/1476885), die die gleiche Lösung vorschlägt. Es ist auch ohne einen Doc-Link. – Zanon

Verwandte Themen