使用angularjs时,无意中重置Bootstrap Datepicker

时间:2015-06-03 10:15:27

标签: angularjs twitter-bootstrap datepicker

我试图将Bootstrap Datepicker from eternicode与angularjs结合使用。

see jsfiddle

var app=angular.module('myApp', [])
.controller('dateCtrl', function($scope) {
    // Case 1:
    $scope.datepick = '';
    // Case 2:
    //$scope.datepick = '25.04.1986';

    $scope.setFirstDate = function() {
        $scope.datepick= '13.10.1960';
    };

    $scope.setAnotherDate = function() {
        $scope.datepick = '20.02.1967';
    };

});

$(document).ready(function(){
    $('.datepicker').datepicker({
        autoclose: true,
        format: 'dd.mm.yyyy',
        clearBtn: true,
        todayBtn: 'linked',
        todayHighlight: true,
        weekStart: '1',
        calendarWeeks: true,
        keyboardNavigation: false
    });
});

基本上,它工作正常。但是当我以编程方式更改日期时,BS Datepicker会忽略它。这表明,当您最初加载小提琴并按照以下步骤操作时:

1)点击'先来我!'

2)选择输入字段,而不触及datepicker

3)跳出标签,按Esc,或点击日期选择器以外的任何地方(关闭它而不选择日期)

您将看到输入字段现在为空。

这不会发生,因为this question中建议的日期格式无效:在小提琴和测试用例2中取消注释第6行。重复上述步骤。日期字段现在显示' 25.04.1986'。

此外,在这两种情况下,您都可以测试点击日期选择器,然后重复步骤1-3。输入字段将显示BS Datepicker选择的最后日期。

{{datepick}}

表明,ng-model始终准确无误,因此此问题与thisthis问题不重复。 看到angularjs始终知道实际日期,我不知道scope.apply如何解决我的问题。

这告诉我:BS Datepicker正在跟踪他自己,并且只会记住datepicker本身选择的初始日期或日期。当关闭而不选择新的时,它会将输入字段重置为此记忆值。

那我怎么能防止这种情况发生呢?

1 个答案:

答案 0 :(得分:1)

所以,我找到了解决这个问题的方法。要防止Datepicker重置输入值,请添加:

forceParse: false

到您的Datepicker选项。请参阅updated jsfiddle

尽管这解决了手头的问题,但请记住,Datepicker将不再解析/检查/更正任何输入。

我相信这是一个错误,并会在Github上创建一个问题。