So greifen Sie auf den $ ngModelController innerhalb des Controllers ohne Formular und ohne Direktive zu

Vielleicht ist es ein Anfängerfehler, aber ich kann anscheinend nicht auf die zugreifen$scope.model's$ngModelController damit ich das packen kann$viewValue davon.

Ich habe eine Eingabe ohne Formular (ich benutze die UI-Mask Direktive):

<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-mask legt für $ modelValue einen anderen Wert als $ viewValue fest, wodurch es schwierig wird, formatierte Daten an den Server zu senden. Wenn der$scope.inicio Modelländerungen, der Wert ist ein Datum ohne Schrägstriche, wie z01012014. Ich muss also in der Lage sein, den Controller für diesen Eingang zu erhalten, aber ohne ihn in eine Form zu packen und zu verwenden$scope.myForm.inicio.$viewValue. Es MUSS möglich sein ...

Dinge, von denen ich weiß, dass ich sie tun kann, die aber hackig erscheinen, muss es einen einfacheren Weg geben:

Platzieren Sie das Element in einem Formular und greifen Sie darauf zu$scope.myForm.input.$viewValueHolen Sie sich die Elementdaten mit jQuery$('input[name="inicio"]').data('$ngModelController');Holen Sie sich das Element mitangular.element('input[name="inicio"]').controller('ngModel');Erstellen Sie eine Direktive, fügen Sie sie in die Eingabe ein und aktualisieren Sie mein Bereichsmodell damit
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">

Antworten auf die Frage(1)

Ihre Antwort auf die Frage