2013-01-30 14 views
5

Ho una direttiva che carica un file JSON quindi utilizza tali dati per creare un disegno su tela HTML5 (cioè i dati JSON contengono elementi come testo, colore, posizione). Ho anche un numero di campi di input (testo, cursori, ecc.) Che consentono all'utente di manipolare il disegno. Vedo che posso o $ guardare ognuno di questi elementi o usare ng-clic e chiamare una funzione - c'è un approccio raccomandato?ng-click vs watch in Angular

Alcune note forse rilevanti:

  • L'elemento forma e la tela sono tutti parte dello stesso modello di direttiva
  • Gli elementi del modulo reagiscono onchange in modo che nessun pulsante di invio
  • Ciascuno di questi valore dell'elemento forma ottenere controllato, forse convertito, quindi modificare la stringa JSON. Quindi chiamo una funzione di aggiornamento che ricarica la mia tela con i nuovi dati.

E 'possibile che mi sto avvicinando questo modo sbagliato troppo ...

risposta

7

Quindi, da quello che ho capito ci sono alcune azioni da parte dell'utente su alcuni elementi (all'interno di una direttiva) e si deve fare qualcosa ogni volta che questi eventi vengono sparati.

L'intento di $ watch è di 'guardare'/fare qualcosa ogni volta che cambia il valore di una particolare variabile. $scope.$watch('watchedVariable', onWatchedVariableChangedFn) dove onWatchedVariableChangedFn è una funzione. Questo viene attivato solo quando il valore cambia effettivamente, indipendentemente da quale sia la causa del cambiamento.

D'altra parte, è possibile collegare i gestori di eventi agli attributi di markup, ad esempio ng-click='onClickFn()'. Questi vengono licenziati dalle azioni sugli elementi dell'interfaccia utente. [Nota anche ng-clic funzionerà solo sugli elementi cliccabili. Sembra che tu abbia più elementi (testo, cursori, ecc.)

Potrebbe essere necessario vedere che cosa esattamente può causare il cambiamento di questi valori/causare il ridisegno della tela e quindi decidere in che direzione andare.

Modifica: una terza alternativa da prendere in considerazione è quella di attivare gli eventi ($ emit/$ broadcast) e gestire ($ su) quegli eventi, laddove applicabile.