如果没有任何代码可以作为此答案的基础,我并不是真的 100% 确定这是您要寻找的东西,但希望这会给您一个提示,告诉您如何完成您想要的。
所以如果你想创建一个非常简单的日期范围选择器,你可以利用 min-date 属性,它指向一个可绑定的表达式。这意味着每当父范围属性更改时,日期选择器的相应隔离范围属性也会更改,反之亦然。因此,如果您将“结束日期”日期选择器的 min-date 属性绑定到“开始日期”日期选择器的模型,则无论何时更改开始日期,都会更新第二个日期选择器以反映更改。
<datepicker ng-model="startdt" show-weeks="false"></datepicker>
<datepicker ng-model="enddt" min-date="startdt" show-weeks="false"></datepicker>
为了让用户感觉更好,您可以进一步观察开始日期并在所选开始日期大于当前所选结束日期的情况下自动更新结束日期。
$scope.$watch('startdt', function(newval){
if (newval > $scope.enddt) {
$scope.enddt = newval;
}
});
为了进一步提高可用性,如果您使用 UI Bootstrap 0.13.0+,您可以使用 custom-class 属性在日期范围内设置自定义 CSS 类。例如,您可以添加:
标记
//Bind the custom-class attribute to the setRangeClass function
<datepicker ng-model="enddt" min-date="startdt" custom-class="setRangeClass(date, mode)" show-weeks="false"></datepicker>
控制器
//Define the setRangeClass on the controller
$scope.setRangeClass = function(date, mode) {
if (mode === 'day') {
var dayToCheck = new Date(date).setHours(0,0,0,0);
var startDay = new Date($scope.startdt).setHours(0,0,0,0);
var endDay = new Date($scope.enddt).setHours(0,0,0,0);
if (dayToCheck >= startDay && dayToCheck < endDay) {
return 'range';
}
}
return '';
};
CSS
/*Create the corresponding .range class*/
.range>.btn-default {
background-color: #5bb75b;
}
.range button span {
color: #fff;
font-weight: bold;
}