2014-09-16 10 views
7

Sto cercando di scoprire come posso ascoltare quando il modello viene aggiornato all'interno di una direttiva.Angularjs: ascolto del cambio di modello in una direttiva

eventEditor.directive('myAmount',function(){ 
    return { 
     restrict: 'A', 
     link: function(scope, elem, attrs) { 
      scope.$watch(attr['ngModel'], function (v) { 
      console.log('value changed, new value is: ' + v); 
      }); 
     } 
     } 
    } 
}; 

});

La direttiva è chiamato all'interno ng-repeat come

<div ng-repeat="ticket in tickets"> 
    <input my-amount ng-model="ticket.price"></input> 
</div> 

Molto felice per qualsiasi aiuto. Non capisco come appare l'attributo scope all'interno di una ng-repeat.

Grazie.

risposta

13

http://jsbin.com/mihupo/1/edit

attrs invece attr

app.directive('myAmount',function(){ 
    return { 
     restrict: 'A', 
     link: function(scope, elem, attrs) { 
      scope.$watch(attrs['ngModel'], function (v) { 
      console.log('value changed, new value is: ' + v); 
      }); 
     } 
     } ; 
    } 
); 
+0

Grazie per la correzione. Funziona alla grande. Grazie! – Niclas

4

provare a fare questo

eventEditor.directive('myAmount',function(){ 
    return { 
    restrict: 'A', 
    scope: {model: '=ngModel'}, 
    link: function(scope, elem, attrs) { 
      scope.$watch('model', function (v) { 
      console.log('value changed, new value is: ' + v); 
      }); 
     } 
     } 
    } 
    }; 
}); 
+0

Grazie. Funziona, ma la risposta di seguito sembra poco più semplice ascoltando attr, ngModel. – Niclas

+0

Grazie! Mi hai bloccato. – blackwood

-1

Seguendo codice funziona per me.

app.directive('myAmount',function(){ 
    return { 
     restrict: 'A', 
     link: function(scope, elem, attrs) { 
      attrs.$observe('ngModel', function (v) { 
      console.log('value changed, new value is: ' + v); 
      }); 
     } 
     } ; 
    } 
); 
+3

Osserva solo le modifiche DOM dell'osservatore, non le modifiche al modello. – dude

Problemi correlati