2015-03-16 10 views
6

violino qui http://jsfiddle.net/prantikv/dJty6/36/Errore: Espressione 'undefined' utilizzato con direttiva è non cedibile

ho dati da JSON in questo modo

$scope.info={ 
"company1":"this", 
"company2":"is", 
    "company3":"sparta" 
} 

Sto usando ng-repeat per stampare tutti i dati e voglio monotor per le modifiche sui campi.

<input type="text" ng-repeat="item in info" value="{{item}}" monitor-change> 

Ho una direttiva monitorChange come questo:

.directive('monitorChange', function() { 
    return { 
    restrict: 'A', 
    scope: {changedFlag: '='}, 
    link: function(scope, element, attrs) { 
     var $el = angular.element(element); 
     $el.on('keyup', function() {//bind to element 
      scope.$apply(function() { 
      scope.changedFlag =true;//on key press value is changed 
      }); 
     }); 
    } 
    }; 
}); 

Quando si cerca di modificare i dati, ricevo l'errore Error: [$compile:nonassign] Expression 'undefined' used with directive 'monitorChange' is non-assignable!

sto stampando i dati a mio avviso con:

{{changedFlag }} 

Cosa c'è di sbagliato nel codice?

+0

È necessario inserire il messaggio di errore effettivo che si sta ricevendo. Aggiornerò la domanda con l'errore completo per te. – Claies

+2

'scope: {changedFlag: '='},' ma non stai dichiarando in HTML alcun attributo 'changed-flag'. –

risposta

9
  1. Come lei ha ricordato scope: {caretPosition: '='} nella definizione direttiva, abbiamo bisogno di passare caret-position="obj.changedFlag" nella marcatura.
  2. Come ng-repeat crea un nuovo ambito per ciascun elemento, è buona norma utilizzare la notazione Dot per le modifiche da riflettere nell'ambito del controller.

Ecco il violino aggiornato. http://jsfiddle.net/dJty6/38/

+1

nota anche, questo potrebbe essere un falso positivo; al momento non c'è modo di riportare questo valore a 'false'; una volta che il valore diventa 'true', rimarrà' true' anche se tutte le modifiche apportate dall'utente vengono annullate. – Claies

Problemi correlati