根据日期选择禁用日期

时间:2015-07-03 15:46:06

标签: javascript angularjs angular-ui-bootstrap

我有一个星期几的下拉选项。我想要发生的是当我更改下拉列表时运行$scope.disabled()方法。从而更改date.getDay() === 2日期中的静态数字。

您可以看到我想要做的$scope.disabled()函数的评论。

Here is a half-working Plunker.

1 个答案:

答案 0 :(得分:1)

Updated Plunker

在您的select元素中,您正在使用ngOptions,因此您可以使用表达式的 select as 部分,使用{{将每个选项的值设置为id 1}}。所以现在,每次更改选择时,selectedDay的值都会更新,并启动摘要。这意味着你不必看任何东西,你的禁用功能可以简化如下:

ng-options="day.id as day.name for day in daysOfWeek"

我添加了一个检查,如果用户没有选择一天,则将day的值设置为0,但您也可以使用以下命令初始化select的值:

$scope.disabled = function(date, mode) {
   var day = angular.isUndefined($scope.selectedDay) ? 0 : $scope.selectedDay;
  if (mode === 'day' && date.getDay() === $scope.selectedDay) {
    return true;
  }
  return;
};

现在所有这些都有效,但是有一个问题:datepicker只在渲染时运行禁用的函数并调用其内部的refreshView函数。我可以想到以编程方式触发datepicker刷新的最简单方法是更改​​其ng-model值。为此,我添加了一个函数:

$scope.selectedDay = 0;

通过在select元素的change事件上调用triggerDate,我们使用当前选择的日期重置datepicker的值(所以我们根本不更改值),这足以强制刷新指令。所以,最终选择看起来像:

$scope.triggerDate = function(date) {
  $scope.dt = new Date(date);
}