2015-03-16 10 views
6

skrzypce tutaj http://jsfiddle.net/prantikv/dJty6/36/Błąd: Wyrażenie „nieokreślone” używane z dyrektywy jest nieprzenoszalna

mam dane z JSON jak tak

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

używam ng-repeat wydrukować wszystkie dane i chcę monotor do zmian na polach.

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

mam dyrektywę monitorChange takiego:

.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 
      }); 
     }); 
    } 
    }; 
}); 

Podczas próby zmiany danych, to pojawi się błąd Error: [$compile:nonassign] Expression 'undefined' used with directive 'monitorChange' is non-assignable!

ja drukowania danych moim zdaniem z:

{{changedFlag }} 

Co jest nie tak z kodem?

+0

Powinieneś opublikować aktualny komunikat o błędzie, który otrzymujesz. Zaktualizuję pytanie z pełnym błędem. – Claies

+2

'scope: {changedFlag: '='},' ale nie deklarujesz w HTML żadnego atrybutu 'changed-flag'. –

Odpowiedz

9
  1. Jak wspomniano scope: {caretPosition: '='} dyrektywy w definicji, musimy zdać caret-position="obj.changedFlag" w znacznikach.
  2. Jako, że ng-repeat tworzy nowy zakres dla każdego elementu, dobrze jest użyć notacji kropkowej, aby zmiany odzwierciedlały w zakresie kontrolera.

Oto zaktualizowane skrzypce. http://jsfiddle.net/dJty6/38/

+1

również zauważyć, że może to być fałszywie dodatnie; obecnie nie ma możliwości zmiany tej wartości z powrotem na "false"; gdy wartość zmieni się na "true", pozostanie "true", nawet jeśli wszystkie zmiany wprowadzone przez użytkownika zostaną cofnięte. – Claies

Powiązane problemy