Ich versuche, ein Zeichenfolge-Datum zu konvertieren, so dass es auf einer HTML-Eingabe mit dem Typ funktioniert, der auf "Datum" festgelegt ist.Konvertieren Zeichenfolge in Datum in AngularJS-Direktive
Also, ich habe folgende Winkel App:
(function() {
var app = angular.module('test', []);
app.controller('MainCtrl', function($scope) {
$scope.load = function() {
$scope.message='2017-12-23T00:00:00Z';
};
});
app.directive('convertDate', function() {
return {
restrict: 'A',
scope: {
ngModel: '='
},
link: function (scope) {
console.log(scope);
console.log(scope.ngModel);
if (scope.ngModel) scope.ngModel = new Date(scope.ngModel);
}
};
});
})();
Dann ist mein html wie folgt:
<div ng-controller='MainCtrl'>
<input type="date" convert-date ng-model="message">
<button ng-click="load()">load</button>
</div>
Wenn ich auf die Schaltfläche Last ich auf die folgende Fehlermeldung erhalten:
Fehler: [ngModel: datefmt] http://errors.angularjs.org/1.6.4/ngModel/datefmt?p0=2017-12-23T00%3A00%3A00Z
Ich verstehe den Fehler i s weil es eine Zeichenfolge ist und ich ein Datum brauche, was der Grund für meine Anweisung ist.
Aber selbst mit der Direktive bekomme ich immer noch den Fehler.
Was fehlt mir?
Dank
Colin
Warum müssen Sie der Eingabe eine Direktive hinzufügen? Fügen Sie einfach 'ng-change =" convertToDate() "' zur Eingabe hinzu, um die Eingabe in ein Datum aus dem Controller selbst zu transformieren. Sie werden in diesem Fall keine Anweisung benötigen. –
Ja, aber ich habe eine Menge Seiten, wo ich diese verwenden muss und jede Seite hat ihren eigenen Controller. Ich möchte nicht die Methode auf jedem Controller. – Sun
Dann könnte ich vorschlagen, stattdessen einen Service hinzuzufügen, würde es die 'convertToDate' Methode, die Sie in all Ihren Controllern verwenden können, um die Arbeit ohne die Notwendigkeit für Richtlinie Shenanigans tun. –