2012-10-09 10 views
20

Ho un elenco di elementi e dopo aver fatto clic su uno degli elementi, viene visualizzata una finestra di dialogo modale per l'utente di apportare alcune modifiche e fare clic su "Chiudi" o "Salva modifiche".AngularJS: modale con associazione ai dati - salva le modifiche solo quando si fa clic su "Salva" o dimentica le modifiche se si fa clic su "Annulla"

Il problema è che, se l'utente apporta alcune modifiche e fa clic su "Chiudi", le modifiche si sarebbero riflesse nel modello a cui è associata la vista, poiché l'associazione dei dati è istantanea.

La mia domanda è, quindi, come rinviare gli aggiornamenti e eseguire solo l'associazione quando si fa clic su "Salva modifiche" o in qualche modo dimenticare le modifiche se si fa clic su "Annulla".

Il codice per la mia finestra di dialogo modale è in questo modo:

<div ui-modal class="fade static" ng-model="modalShown" id="myModal" data-backdrop="static"> 
     <div class="modal-header"> 
      <button type="button" class="close" ng-click="closeModal()" aria-hidden="true">&times;</button> 
      <h3>{{selectedClientFeature.feature.type}}</h3> 
     </div> 
     <div class="modal-body">  
      <ul class="unstyled columnlist"> 
       <li ng-repeat="country in countriesForEdit"> 
        <input type="checkbox" ng-model="country.selected"> {{country.name}} 
       </li> 
      </ul> 
     </div> 
     <div class="modal-footer"> 
      <a ng-click="closeModal()" class="btn">Close</a> 
      <a ng-click="saveChanges()" class="btn btn-primary">Save changes</a> 
     </div> 
    </div> 

Grazie, Shaun

risposta

11

L'uso doc angularjs per avere un esempio di questa situazione. Quello di cui hai bisogno è clonare il tuo modello (vedi angular.copy), prima di mostrare la tua modal di modifica, e quando un utente fa clic su closeModal() devi riassegnare il tuo modello al valore clonato. IMHO, vorrei rinominare il tuo pulsante 'Chiudi' in 'Annulla' e metterlo a destra di 'Salva modifiche', questo è più esplicito e sembra essere il modo in cui molti siti funzionano.

Spero che questo aiuti

--dan

Problemi correlati