2017-08-04 2 views
0

Ich benutze Angular 1.6 und ich möchte direkt eine Zeichenfolge an einen Eingang vom Typ Datum binden, anstatt das Datum zu einem Datum zu konvertieren und dann an den Eingang binden. Der Grund ist, dass ich JSON (zusammen mit anderen Daten) vom Server bekomme und ich möchte keine intermediäre Variable nur für das Datum erstellen, ich möchte direkt den JSON verwenden, und somit kann ich meinen JSON so zurücksenden wie er ist wenn es Änderungen im Eingabefeld gibt und keine Notwendigkeit, ng-change und Datum zu konvertieren und es meine JSON, etc ... Ich habe plunkered mein Problem. HierWinkel Bind Bind Datum zum Eingangstyp Datum

ist die html:

<body ng-app="plunker" ng-controller="MainCtrl"> 
    <form name="myForm"> 
    <label for="exampleInput">Date input</label> 
    <input type="date" id="exampleInput" name="input" ng-model="date" placeholder="yyyy-MM-dd"/> 
    </form> 
</body> 

Und hier ist die javascript:

var app = angular.module('plunker', []); 
app.controller('MainCtrl', function($scope) { 
    $scope.dateString = '2017-01-31'; 
    $scope.date = new Date(2017, 11, 31); 
}); 

Wenn ich die Eingabe in Variable $ scope.date binden es in Ordnung ist, aber es ist KO, wenn ich binden es zu Variable $ scope.dateString.

+0

der richtige Weg ist, um die 'Date' Objekt zu verwenden, dann, wenn Sie wollen zeige dieses Datum an, du kannst einfach einen Filter darauf anwenden {{{Datum | Datum}} '. Sie können das Date-Objekt in den Service instanziieren, wenn Sie den JSON erhalten. – Hitmands

+0

Sie können "ngModelController" -Funktionen verwenden und benutzerdefinierte Parser und Viewer https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#custom-control-example – Icycool

+0

@Hitmands: Danke, aber antwortet nicht meine brauche – Mouss

Antwort

1

Sie können es tun, indem Sie Wert Attribut Ihrer Eingabe wie folgt aus:

angular 
 
    .module('plunker', []) 
 
    .controller('MainCtrl', function($scope) { 
 
    $scope.dateString = '2017-01-31'; 
 
    $scope.date = new Date(2017, 11, 31); 
 
    }) 
 
;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<section ng-app="plunker" ng-controller="MainCtrl"> 
 
    
 
    <form name="myForm"> 
 
    <label for="exampleInput">Date input</label> 
 
    
 
    <input 
 
     type="date" value="{{dateString | date : 'yyyy-MM-dd'}}" 
 
     ng-model="dateString" placeholder="yyyy-MM-dd" 
 
    /> 
 
    </form> 
 
    
 
</section>

+0

Danke, es scheint zu arbeiten, aber ich habe Fehler in der Konsole: "Fehler: [ngModel: datefmt] http://errors.angularjs.org /1.5.11/ngModel/datefmt?p0=2017-01-31 "und entsprechend anguar doc: AngularJS setzt in diesem Fall keine Validierungsfehler auf , da diese Fehler dem Benutzer – Mouss

+0

@JeanJacques' $ scope angezeigt werden. dateString' sollte gar nicht existieren ... '{{date | Datum: 'JJJJ-MM-TT'}} stattdessen – Hitmands