2013-05-16 21 views
9

Sto creando un client Web che funziona con un API impostazioni web con angolare. Ci sono molte impostazioni e sono tutte opzionali. Se invio un'impostazione, dovrebbe essere salvata. Le impostazioni che non vengono inviate non dovrebbero cambiare.forma angolare - Invia solo i campi modificati

Il requisito è quello di avere un pulsante Salva modifiche per tutte le impostazioni.

mi chiedo se c'è qualche modo in angolare per implementare questa.

Ho pensato di non utilizzare l'HTML form e di raccogliere i dati e creare una richiesta Ajax da solo, ma poi perderò il meccanismo di convalida (che funziona bene con l'interfaccia utente di Angular).

ho pensato di dividere la forma in piccole forme e submiting solo le forme in cui ng-dirty non è falso, ma questo può causare un parziale di salvataggio se alcune richieste falliranno (e questo è contro l'obbligo).

Qualche idea?

risposta

6

Nella documentazione angolare c'è un esempio che copre ng-copia per implementare una funzione di reset.

http://docs.angularjs.org/cookbook/advancedform

Durante invia si potrebbe paragonare il vostro modello di partenza (copia master) per il mutato/oggetto presentato (copia modificata) e inviare solo gli elementi modificati (o semplicemente eliminare quelli che sono gli stessi/invariato).

Diff la copia e master con http://blog.vjeux.com/2011/javascript/object-difference.html Questo ha bisogno di ulteriore lavoro per gestire gli array. Oppure convertire in JSON e diff JSON https://github.com/benjamine/JsonDiffPatch

+0

questo non è quello che stavo cercando, ma immagino questo significa che angolare non offre questa funzionalità out of the box. grazie. –

+2

Questo è reinventare la ruota - FormController angolare e ngModel già eseguire controlli sporchi, aggiungere classi e memorizzare queste informazioni in ambito $. Si veda la risposta da r4w87173 –

+0

@ArturBodera Cosa devo fare per automatizzare questo processo? Sembra che ho bisogno di tenere traccia dei nomi di input e degli attributi del modello. (In realtà sto chiedendo). – keyser

17

È possibile controllare se il modulo o qualsiasi campo con nome viene modificato prima dell'invio. Se il modulo ha un nome e gli ingressi hanno nomi come:

<form name="myForm"> 
    <input name="input1"> 
</form> 

Nel controllore si avrà accesso all'oggetto $scope.myForm e $scope.myForm.input1, e questi oggetti avrà una proprietà $dirty che è vero se il valore originale era modificato dall'utente.

Problemi correlati