Javascript 角度引导日期选择器在dateDisabled函数中使用$http请求禁用日期

Javascript 角度引导日期选择器在dateDisabled函数中使用$http请求禁用日期,javascript,angularjs,angular-ui-bootstrap,angular-ui,bootstrap-datepicker,Javascript,Angularjs,Angular Ui Bootstrap,Angular Ui,Bootstrap Datepicker,所以我有uibDatepicker指令(),我想在其中发送datepicker中提供的每一天的请求,用那个日期点击服务器,然后返回是否应该禁用它。 问题在于它是异步调用,dateDisabled函数不处理承诺。 有什么建议吗 <span uib-datepicker datepicker-options="datepickerOptions" ng-model="selectedDate"></span> 我尝试了很多解决方案。我找到了这个答案: 但我无法将此应用于我的

所以我有uibDatepicker指令(),我想在其中发送datepicker中提供的每一天的请求,用那个日期点击服务器,然后返回是否应该禁用它。 问题在于它是异步调用,dateDisabled函数不处理承诺。 有什么建议吗

<span uib-datepicker datepicker-options="datepickerOptions" ng-model="selectedDate"></span>
我尝试了很多解决方案。我找到了这个答案:


但我无法将此应用于我的代码。

您可以预加载禁用的日期并将其存储在范围变量中,然后在缓存数据中搜索当前日期。我认为这是最好的解决方案。

所以我设法用禁用的预加载日期修复了这个问题。我需要的技巧是首先从datepicker获取所有42个可见日期,然后将它们传递到服务器,过滤并返回。此外,如果我们更改月份,我们将有新的42个可见日期,因此我们需要再次更新禁用的日期

您可以在此问题中看到获取datepicker可见日期的部分步骤:

我考虑过这个解决方案,但我有两个问题1。我的搜索取决于某个资源正在执行某些工作,因此如果我们更改资源,则日期应该更新,因此我无法预加载该2。如果客户每月变动怎么办?我需要在接下来的2年内禁用日期…在服务器端要做的事情很重,而且还有很多不必要的工作。所以,在这种情况下,我想要的是只获得datepicker中显示的30天的禁用日期,如果我们更改月份,我们点击服务器并获得datepicker中显示的那些日期的禁用日期。感谢您可以查看当前月份,然后重新加载日历谢谢robert,我成功地解决了这一问题,因为我扩展了uibDatepickerDirective,用于从日期选择器获取所有可见日期,然后按照您编写的方式预加载结果。当日期选择器更改月份时,它会调用
dateDisabled
函数7x6(42)次。你真的想在用户每次选择不同的月份时给服务器打42个电话吗?有没有办法从datepicker获得这42天?因此,我可以立即传递它们并生成响应?
dateDisabled
API不是为异步使用而设计的。考虑使用被设计为异步使用的。
$scope.datepickerOptions: {
    dateDisabled: function (dateAndMode) {
        if (dateAndMode.mode !== "day") {
            return false;
        }
        //async call
        TimeService.getIsDateAvailable(dateAndMode.date).then(function (data) {
          //returns true or false
            return data.data;
        });
    }