我正在尝试在我的应用中使用angular-bootstrap datepicker模块并遇到小问题。我使用输入文本和按钮显示日期,如下所示:
<div class="row" id="datePicker">
<p class="input-group">
<input type="text" class="form-control" datepicker-popup="{{format}}" ng-model="currentDate"
is-open="opened" datepicker-options="dateOptions" date-disabled="disableDt(date, mode)"
ng-required="true" close-text="Close" show-button-bar="false" ng-init="" readonly/>
<span class="input-group-btn">
<button type="button" class="btn btn-default" ng-click="open($event)">
<i class="glyphicon glyphicon-calendar"></i>
</button>
</span>
</p>
</div>
由于使用有角度的谷歌地图,我必须手动引导我的应用程序。似乎由于手动引导,datepicker无法正确格式化日期并显示整个未格式化的日期。当我从datepicker中选择任何日期时,日期将在输入字段中正确显示。更重要的是,模型更改不会强制格式更改(例如,最初我从json文件中获取了一些日期,它们显示在字段中,但没有格式化)。 示例如下:
有没有办法刷新这个小部件,以便它在开始时知道正确的格式,或者在适当的时候更改它以正确初始化?
编辑:当我将datepicker移动到片段时,它应该没有初始化模型的问题(此片段稍后加载)。仍然出现问题 - 日期没有格式化,似乎根本没有与格式化程序或模型相关联(例如,制作格式下拉列表并选择不同的值,因为教程在日期选择器中选择日期之前不会工作)。
编辑2 来自camden_kid提供的链接的解决方案有效! :)详细评论。
答案 0 :(得分:5)
答案可以在这里找到: AngularJS 1.3 - Datepicker initial format is incorrect
我在初始化时手动格式化了日期,如下所示:
$scope.currentDate = $filter('date')(new Date(), $scope.format);
然而,更好的解决方案是如下重载指令(取自原始链接):
angular.module('myApp').directive('datepickerPopup', function (dateFilter, datepickerPopupConfig) {
return {
restrict: 'A',
priority: 1,
require: 'ngModel',
link: function(scope, element, attr, ngModel) {
var dateFormat = attr.datepickerPopup || datepickerPopupConfig.datepickerPopup;
ngModel.$formatters.push(function (value) {
return dateFilter(value, dateFormat);
});
}
};
});
之后datepicker更改日期时,datepicker本身处理任何日期格式:)
感谢@camden_kid提供链接! :)