2013-05-21 11 views
78

Jak można uniknąć umieszczenia w trzecim wierszu oświadczenia {{f = ...}} w celu wydrukowania zawartości forecast[day.iso]?AngularJS: Jak ustawić zmienną wewnątrz szablonu?

Chcę uniknąć używania forecast[day.iso].temperature i tak dalej dla każdej iteracji.

<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

To nie może być odpowiedź, ale przydatna wskazówka jest użycie {{f = prognoza [day.iso]; ""}}, jak to będzie nie drukuje niczego w widoku. –

Odpowiedz

160

Zastosowanie 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> 

przykład: http://jsfiddle.net/coma/UV4qF/

+27

Jeśli chcesz więcej niż jedna zmienna, oddzielaj je średnikiem ";" – bentzy

+0

Wskazówka dla niewtajemniczonych ... w zależności od struktury szablonu, możesz skończyć z wszystkimi rekordami pokazującymi tylko ostatnią wartość twojej zmiennej (w moim przypadku, Angular zaktualizował substytucje w kolejnym cyklu trawienia, ponieważ wszystkie są powiązane do tego samego wyrażenia)! Aby zwalczyć tę sytuację, możesz przypisać zmienną jako właściwość bieżącego rekordu, który jest iterowany (jeśli jest to praktyczne w przypadku użycia). W powyższym przykładzie stałoby się to 'ng-init =" day.f = forecast [day.iso] "' –

24

To not the best answer, ale jego także opcja: ponieważ można złączyć wielu wyrażeń, ale tylko ten ostatni jest renderowany możesz zakończyć wyrażenie za pomocą "", a zmienna zostanie ukryta.

Tak, można zdefiniować zmienną:

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

Czy jest to udokumentowana funkcja? –

+0

@ Danielhem, nie mogłem znaleźć. Właśnie zobaczyłem komentarz [this] (http://stackoverflow.com/questions/16665319/how-to-set-a-vantide-inside-of-a-template#comment54563800_16665319), przetestowałem pomysł, polubiłem i zdecydowałem się dodaj jako odpowiedź, ponieważ jest bardziej widoczna i trudniejsza do stracenia. – Zanon

+0

@DanielF, właśnie znalazłem tę wysoko głosowaną [odpowiedź] (http://stackoverflow.com/a/28432472/1476885), która proponuje to samo rozwiązanie. Jest również bez linku do dokumentu. – Zanon

Powiązane problemy