AngularJS: Як встановити змінну всередині шаблону?


89

Як я можу уникнути того, щоб {{f = ...}}твердження у третьому рядку роздруковувало вмістforecast[day.iso] ?

Я хочу уникати використання forecast[day.iso].temperatureтощо для кожної ітерації.

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

3
Можливо, це не відповідь, але корисна порада - використовувати {{f = forecast [day.iso]; ""}}, оскільки це не буде друкувати нічого у поданні.
Matt Leonowicz

Відповіді:


188

Використовуйте 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>

Приклад: http://jsfiddle.net/coma/UV4qF/


31
Якщо вам потрібно більше однієї змінної, просто розділіть їх крапкою з комою ';'
bentzy

Порада непосвяченим ... залежно від вашої структури шаблону, у вас можуть вийти всі записи, що відображають лише останнє значення вашої змінної (у моєму випадку Angular оновив заміни в наступному циклі дайджесту, оскільки всі вони зв’язані з той самий вираз)! Для боротьби з цією ситуацією ви можете призначити змінну властивістю поточного запису, який повторюється (якщо це практично для вашого випадку використання). У наведеному вище прикладі це могло б статиng-init="day.f = forecast[day.iso]"
Джон Рікс

35

Це не найкраща відповідь , але це також варіант: оскільки ви можете об’єднати кілька виразів, але відображається лише останній, ви можете закінчити свій вираз ""і ваша змінна буде прихована.

Отже, ви можете визначити змінну за допомогою:

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

Це задокументована особливість?
Даніель Ф

@DanielF, я не зміг знайти. Я просто побачив цей коментар, протестував ідею, сподобався і вирішив додати як відповідь, оскільки він має більшу видимість і його важче втратити.
Zanon

@DanielF, щойно знайшов цю високо оцінену відповідь, яка пропонує таке саме рішення. Це також без посилання на документ.
Zanon

@DanielF, я оновив свою відповідь. Мені довелося задати питання, щоб краще його зрозуміти. Це не особлива особливість. Просто поведінка зв’язних виразів.
Zanon,

8
Цей злом особливо корисний, коли ви хочете, щоб вираз був прив'язаний до змін обсягу, а не запускався один раз на init.
Ронні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.