AngularJS: come impostare una variabile all'interno di un modello?


90

Come posso evitare che l' {{f = ...}}istruzione nella terza riga stampi il contenuto di forecast[day.iso]?

Voglio evitare di usare forecast[day.iso].temperaturee così via per ogni iterazione.

<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
Potrebbe non essere una risposta, ma un suggerimento utile è usare {{f = forecast [day.iso]; ""}} poiché non stampa nulla nella vista.
Matt Leonowicz

Risposte:


189

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

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


31
Se vuoi più di una variabile, separale semplicemente con punto e virgola ";"
piegato

Suggerimento per chi non lo sapesse ... a seconda della struttura del tuo modello, puoi finire con tutti i record che mostrano solo l'ultimo valore della tua variabile (nel mio caso, Angular ha aggiornato le sostituzioni in un successivo ciclo di digest, poiché sono tutte vincolate a la stessa espressione)! Per combattere questa situazione, puoi assegnare la variabile come proprietà del record corrente su cui eseguire l'iterazione (se pratico per il tuo caso d'uso). Nell'esempio sopra, questo diventerebbeng-init="day.f = forecast[day.iso]"
John Rix

35

Non è la risposta migliore , ma è anche un'opzione: poiché puoi concatenare più espressioni, ma solo l'ultima viene visualizzata, puoi terminare la tua espressione con ""e la tua variabile verrà nascosta.

Quindi, potresti definire la variabile con:

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

È una caratteristica documentata?
Daniel F

@DanielF, non sono riuscito a trovare. Ho appena visto questo commento, testato l'idea, mi è piaciuto e ho deciso di aggiungere come risposta poiché ha più visibilità ed è più difficile da perdere.
Zanon

@DanielF, ho appena trovato questa risposta votata alta che propone la stessa soluzione. È anche senza un collegamento al documento.
Zanon

@DanielF, ho aggiornato la mia risposta. Ho dovuto fare una domanda per capirlo meglio. Non è una caratteristica speciale. Solo il comportamento di concatenare le espressioni.
Zanon

8
Questo trucco è particolarmente utile quando si desidera che l'espressione sia vincolata alle modifiche dell'ambito, piuttosto che eseguita una volta su init.
Ronny
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.