AngularJS: Jak ustawić zmienną w szablonie?

90

Jak mogę uniknąć {{f = ...}}wydrukowania treści w trzecim wierszu forecast[day.iso]?

Chcę uniknąć używania forecast[day.iso].temperaturei 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>
Daniel F.
źródło
3
To może nie być odpowiedź, ale przydatna wskazówka to użycie {{f = prognoza [dzień.iso]; ""}}, ponieważ nie spowoduje to wydrukowania niczego w widoku.
Matt Leonowicz

Odpowiedzi:

189

Użyj ngInit : https://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/

śpiączka
źródło
31
Jeśli chcesz mieć więcej niż jedną zmienną, oddziel je średnikiem ';'
bentzy
Wskazówka dla niewtajemniczonych ... w zależności od struktury szablonu, możesz skończyć z wszystkimi rekordami pokazującymi tylko ostatnią wartość zmiennej (w moim przypadku, Angular zaktualizował podstawienia w kolejnym cyklu podsumowania, ponieważ wszystkie one są powiązane z to samo wyrażenie)! Aby zwalczyć tę sytuację, możesz przypisać zmienną jako właściwość bieżącego rekordu podlegającego iteracji (jeśli jest to praktyczne w twoim przypadku użycia). W powyższym przykładzie byłoby tong-init="day.f = forecast[day.iso]"
John Rix,
35

To nie jest najlepsza odpowiedź , ale jest to również opcja: ponieważ możesz łączyć wiele wyrażeń, ale renderowane jest tylko ostatnie, możesz zakończyć swoje wyrażenie, ""a zmienna zostanie ukryta.

Możesz więc zdefiniować zmienną za pomocą:

{{f = forecast[day.iso]; ""}}
Zanon
źródło
Czy to udokumentowana funkcja?
Daniel F
@DanielF, nie mogłem znaleźć. Właśnie zobaczyłem ten komentarz, przetestowałem pomysł, polubiłem go i postanowiłem dodać jako odpowiedź, ponieważ jest bardziej widoczny i trudniej go zgubić.
Zanon
@DanielF, właśnie znalazłem tę wysoko ocenioną odpowiedź, która proponuje to samo rozwiązanie. Jest również bez linku do dokumentu.
Zanon
@DanielF, zaktualizowałem moją odpowiedź. Musiałem zadać pytanie, żeby lepiej to zrozumieć. To nie jest specjalna funkcja. Po prostu zachowanie konkatenacji wyrażeń.
Zanon
8
Ten hack jest szczególnie przydatny, gdy chcesz, aby wyrażenie było powiązane ze zmianami zakresu, a nie uruchamiane raz na init.
Ronny