2013-01-24 5 views
5

Perché i formattatori non funzionano con ambito isolato? Questo bug angolare o sto facendo qualcosa di sbagliato?Perché i formattatori non funzionano con ambito isolato?

Contiene isola portata e non funziona: http://jsfiddle.net/YbdXQ/56/

restrict: 'A', 
scope:{}, 
link: function(scope, elm, attrs, ctrl) { 
     ctrl.$formatters.unshift(function(modelValue) { 
      console.log("In formatters" + modelValue); 
     return $filter('date')(modelValue); 
    }); 

Questo non contiene isolata e campo di applicazione funziona bene: http://jsfiddle.net/YbdXQ/57/

restrict: 'A', 
link: function(scope, elm, attrs, ctrl) { 
     ctrl.$formatters.unshift(function(modelValue) { 
      console.log("In formatters" + modelValue); 
     return $filter('date')(modelValue); 
    }); 

risposta

6

Questo non ha nulla a che fare con formattatori, ma piuttosto il fatto che ngModel non ha più accesso al valore che stai cercando di passarlo. Quando si crea un ambito isolato, myDate non è più disponibile per la direttiva ngModel (poiché è stato creato un nuovo ambito, un ambito isolato, che non dispone di myDate su di esso). Come prova, ecco un not-so-useful example che set di myDate sulla portata in base a ciò che è passato per l'attributo ngModel: http://jsfiddle.net/YbdXQ/78/

angular/angular.js#1069, "la portata di isolamento One della direttiva isola altre direttive sullo stesso elemento," parla di questo problema:

Per esempio, notare come la mia direttiva personalizzato impedisce ng-modello di lavorare

Potreste anche essere interessati a this StackOverflow question, "ngModel and component with isolated scope".