2013-06-14 13 views
8

Może to błąd debiutanta, ale nie mogę uzyskać dostępu do $scope.model$ngModelController, więc mogę pobrać z niego $viewValue.

mam wejście bez formy (im przy dyrektywę ui-maska):

<input type="text" ng-model="inicio" name="inicio" ui-mask="99/99/9999"> 
// inside my controller 
$scope.inicio = dateFilter((new Date).getTime(), 'dd/MM/yyyy'); 

ui maska ​​ustawić $ modelValue inną wartość niż $ viewValue, utrudniając wysyłać sformatowane dane na serwer. Kiedy zmienia się model $scope.inicio, wartością jest data bez ukośników, na przykład 01012014. Muszę więc mieć możliwość uzyskania kontrolera dla tego wejścia, ale bez konieczności zawijania go w formularzu i używania $scope.myForm.inicio.$viewValue. Musi być możliwe ...

Co wiem, że mogę zrobić, ale wydaje się hacky, musi być prostszy sposób:

  • Umieścić element wewnątrz formularza i do niego dostęp za pośrednictwem $scope.myForm.input.$viewValue
  • Get dane elementu jQuery $('input[name="inicio"]').data('$ngModelController');
  • Get element używając angular.element('input[name="inicio"]').controller('ngModel');
  • Tworzenie dyrektywę, umieścić go na wejściu i zaktualizować mojego modelu zakres z nim
app.directive('viewValue', function(){ 
    return { 
    priority: 10, 
    require: 'ngModel', 
    link: function(scope, element, attrs, controller){ 
     scope.$watch(attrs.viewValue, function(newValue, oldValue){ 
     if (newValue !== oldValue){ 
      scope[attrs.viewValue] = controller.$viewValue; 
     } 
     }); 
    } 
    } 
}); 
<input type="text" ui-mask="99/99/9999" ng-model="inicio" view-value="inicio"> 
+0

Dlaczego umieszczanie elementu wewnątrz znacznika formularza jest zjadliwe? – Stewie

+0

Nie potrzebuję formularza, tylko dane wejściowe, nie ma sensu, aby musiałem użyć dwóch modeli, dla jednej "prostej" rzeczy, to jest uzyskać dostęp do 'ngModelController' na tym elemencie, a także mając dane wejściowe bez Formularz jest idealnie cienki. – pocesar

Odpowiedz

4

I podobnie jak dyrektywa alternatywy. Zasadniczo dyrektywa ui-mask nie robi tego, co chcesz, więc równie dobrze możesz napisać własną dyrektywę.

Nie powinieneś podawać inicio do swojej dyrektywy . Zamiast tego dodaj własny parser do ngModelCtrl.$parsers. Oto przykład: https://stackoverflow.com/a/15556249/215945

+0

Wartość, która trafia do analizatora składni, jest już zmodyfikowaną datą bez formatowania. dyrektywa nie powinna wiedzieć, jaki powinien być format ... co jeszcze mogę zrobić? – pocesar

+1

ah, widzę, po prostu zwracam kontroler. $ ViewValue z niego, zamiast próbować przekształcić wprowadzony tekst. miły! – pocesar

Powiązane problemy