如何处理" ng-model值必须是Date对象"控制台错误

时间:2017-11-08 10:29:04

标签: javascript angularjs datepicker

Angular ui-datepicker使用' Clear'按钮将输入设置为空值,这将在dev-tools控制台中生成错误

  

Datepicker指令:" ng-model" value必须是Date对象,自01.01.1970以来的毫秒数或表示RFC2822或ISO 8601日期的字符串。

有关于wheres和whys的问题,但我想在我自己的代码中处理错误,而不是破坏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;
        }
    }
}

两个日期选择器中的一个看起来像这样,另一个是相同的,除了它有"到"而不是"来自"编号为" 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,但它不起作用。

如何处理上述控制台错误?

1 个答案:

答案 0 :(得分:1)

根据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可能会帮助你。