AngularJS: Bir şablonun içinde bir değişken nasıl ayarlanır?


91

{{f = ...}}Üçüncü satırdaki ifadenin içeriğini yazdırmasını nasıl önleyebilirim forecast[day.iso]?

forecast[day.iso].temperatureHer yinelemede kullanmaktan kaçınmak istiyorum .

<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
Bu bir yanıt olmayabilir, ancak görünümde herhangi bir şey yazdırmayacağı için {{f = tahmin [day.iso]; ""}} kullanmak yararlı bir ipucu olabilir.
Matt Leonowicz

Yanıtlar:


190

NgInit'i kullanın : 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>

Örnek: http://jsfiddle.net/coma/UV4qF/


31
Birden fazla değişken istiyorsanız, onları noktalı virgülle ayırın ';'
2014 13

Başlatılmamış olanlar için ipucu ... şablon yapınıza bağlı olarak, değişkeninizin yalnızca son değerini gösteren tüm kayıtlarla sonuçlanabilirsiniz (benim durumumda, Angular, ikameleri sonraki bir özet döngüsünde güncelledi, çünkü bunların tümü aynı ifade)! Bu durumla mücadele etmek için, değişkeni üzerinde yinelenen geçerli kaydın bir özelliği olarak atayabilirsiniz (kullanım durumunuz için pratikse). Yukarıdaki örnekte, bu şöyle olacaktırng-init="day.f = forecast[day.iso]"
John Rix

35

Bu en iyi cevap değil, aynı zamanda bir seçenek: birden çok ifadeyi birleştirebildiğinizden, ancak yalnızca sonuncusu işlendiğinden, ifadenizi ile bitirebilirsiniz ""ve değişkeniniz gizlenecektir.

Böylece değişkeni şu şekilde tanımlayabilirsiniz:

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

Bu belgelenmiş bir özellik mi?
Daniel F

@DanielF, bulamadım. Bu yorumu yeni gördüm , fikri test ettim, beğendim ve daha fazla görünürlüğe sahip olduğu ve kaybetmesi daha zor olduğu için yanıt olarak eklemeye karar verdim.
Zanon

@DanielF, az önce aynı çözümü öneren bu yüksek oylu cevabı buldu . Ayrıca bir doc bağlantısı yoktur.
Zanon

@DanielF, cevabımı güncelledim. Daha iyi anlamak için bir soru sormam gerekiyordu. Bu özel bir özellik değil. Sadece ifadeleri birleştirme davranışı.
Zanon

8
Bu hack, ifadenin init üzerinde bir kez çalıştırmak yerine, kapsam değişikliklerine bağlı olmasını istediğinizde özellikle yararlıdır.
Ronny
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.