Ich verwende Angular UI Bootstrap Datumsauswahl: https://angular-ui.github.io/bootstrap/#/datepickerParse Datums-String-Objekt Datum beim Laden Angular UI Bootstrap Datepicker
Wenn ich machen Form unter Verwendung von Daten vom Server empfangen, ist es ein Problem mit Datetime-Felder. Mein Eingangsdatepicker sieht wie folgt aus:
<form name="itemForm">
<input type="datetime" class="form-control" id="startedAt" name="startedAt"
ng-model="item.startedAt"
ng-click="open($event, 'startedAt')"
uib-datepicker-popup="yyyy-MM-dd"
is-open="datepickers.startedAt"
/>
</form>
Mein Server gibt Antwort Datetime als JSON-String:
{
...
startedAt: "2015-05-29T02:00:00+0200"
}
Wenn ich Antwortdaten an das Modell $scope.item = response;
zuweisen, wird picker Eingabefeld korrekt wiedergegeben (richtige Datum ist ausgewählt und es ist korrekt in dem Format formatiert, das ich ausgewählt habe). Das Problem besteht darin, dass die Validierung nicht bestanden wird. Ich bekomme:
itemForm.startedAt.$invalid == true
Ich bemerkte, dass an den Datepicker Feld gebunden Daten Date
Objekt sein sollte und nicht die Zeichenfolge (wenn ich neue Datum von der Datumsauswahl wählen, $scope.item.startedAt
ist ein Date
)
ich es geschafft, zu arbeiten, um dieses Problem und tut dies in der Steuerung:
$scope.item = response;
$scope.item.startedAt = new Date($scope.item.startedAt);
es so funktioniert ... Aber ich mag nicht manuell jedes Mal, wenn ich eine Antwort vom Server-String tut Datum konvertieren bekommen. Ich habe versucht, eine Richtlinie zu erstellen, dass ich mit dem Datepicker Eingabefeld zuweisen, damit es die ng-model
für mich konvertiert:
.directive("asDate", function() {
return {
require: 'ngModel',
link: function (scope, element, attrs, modelCtrl) {
modelCtrl.$formatters.push(function (input) {
var transformedInput = new Date(input);
if (transformedInput != input) {
modelCtrl.$setViewValue(transformedInput);
modelCtrl.$render();
}
return transformedInput;
});
}
}
})
Nun, es funktioniert, denn jetzt kann ich Date
Objekt sehen, wenn ich Output-Modell aus meiner Sicht : {{item.startedAt}}
. Aber immer noch Validierung schlägt fehl! Ich vermute, das ist ein Problem mit mir zu verstehen, wie Daten zwischen Modell und der Ansicht fließen und wie UI Bootstrap in es einhakt.
Auch wenn ich meine Richtlinie $formatters.unshift
von $formatters.push
wechseln, kann die Validierung in Ordnung, aber picker nicht formatiert meine Datetime (insted von schön formattet yyyy-MM-dd
sehe ich ISO-String innerhalb des Eingangs)
AWW Mann haben wir genau das gleiche Problem hier verwandeln kann !!! –
@VictorParmar derzeit mache ich das den Weg herum - Umwandlung der Antwort-String in Date-Objekt beim Empfang vom Server. Und Konvertieren von Date-Objekt in Zeichenfolge beim Senden an den Server. All dies erfolgt im Angular Controller manuell. Vielleicht werde ich nur diese Logik als Angular Service extrahieren, aber ich denke nicht, dass es möglich ist, mit Richtlinie zu tun – rsobon
ja dem Club beizutreten - wir am Ende tun die gleiche Sache :) –