使用“清除”按钮时 Angular ui-datepicker 将输入设置为空值,这会在开发工具控制台中生成错误
Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.
关于位置和原因有很多问题,但我想在我自己的代码中处理错误,而不是破解 datepicker 插件本身。当我处理验证时,它不会导致我的表单行为错误。我正在使用这段代码:
function logicalDates(from, to) {
if (vm.to === null || vm.to === undefined || vm.to === NaN) {
vm.logicalDatesBool = true;
} else {
if (new Date(vm.from) > new Date(vm.to)) {
vm.logicalDatesBool = false;
} else {
vm.logicalDatesBool = true;
}
}
}
两个日期选择器中的一个看起来像这样,另一个是一样的,除了它有“to”而不是“from”并且编号为“ng-click =”open2 ...”
<input class="form-control"
type="text"
ng-click="open1($event,'opened1')"
is-open="opened1"
max-date="maxDate"
placeholder="{{'dd/mm/yyyy' | translate}}"
datepicker-options="dateOptions"
ng-required="false"
datepicker-popup="{{format}}"
ng-model="vm.from"
current-text="{{'Today'| translate}}"
toggle-weeks-text="{{'Weeks'| translate}}"
clear-text="{{'Clear'| translate}}"
close-text="{{'Close'| translate}}"
ng-change="vm.logicalDates(vm.from, vm.to)" />
<span class="input-group-btn">
<button class="btn btn-standard" ng-click="open1($event)">
<i class="glyphicon glyphicon-calendar"></i>
</button>
</span>
<div class="value form-group pull-left" ng-if="!vm.logicalDatesBool"
style="margin-left: 2rem;" >
<div class="note note-error" translate>'From' date should preceed 'to'
date</div>
</div>
我认为这是关于错误处理的问题,但我不确定!我尝试在输入元素上使用 $datepickerSuppressError,但它不起作用。
如何处理上面的控制台错误?
最佳答案
按照 following thread 中的建议(即 this comment )通过修改 datepicker.js 行 652 有一个现有的解决方法:
ngModel.$viewChangeListeners.push(function () {
if (ngModel.$viewValue)
scope.date = dateParser.parse(ngModel.$viewValue, dateFormat, scope.date) ||
new Date(ngModel.$viewValue);
else
scope.date = null;
});
根据我以前的经验,它确实有效,尽管那是很久以前的事了,而且我也不能 100% 确定您使用的版本,而我当时使用的是什么版本。
编辑
在讨论无法访问 datepicker.js 的情况下 another comment来自同一个线程可能会帮助你。
关于javascript - 如何处理控制台中的 "ng-model value must be a Date object"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47177270/