当前位置: 首页 > 面试题库 >

使用工厂响应UI引导日期选择器禁用日期

陈弘厚
2023-03-14
问题内容

我正在尝试在连接到Google日历的UI Bootstrap Datepicker中禁用某个日期,如果该日期已具有3个或更多事件。

到目前为止,我是使用Angular Factory获得事件数组的,如下所示:

gardenpage.factory('Dates', function($http, $q) {
var deffered = $q.defer();
var data = [];  
var Dates = {};

Dates.async = function() {
   $http.get('http://localhost:7777/events')
   .success(function (d) {
   data = d;
   deffered.resolve();
});
return deffered.promise;
};
Dates.data = function() { return data; };

return Dates;
});

日期列表需要更多的预处理,因此我有一个函数可以将只有三个或三个以上条目的日期放在范围变量中:

$scope.occurences = ['2014-07-21','2014-07-28'];

现在,这终于是我修改后的默认UI Bootstrap日期选择器日期禁用功能:

// Disable weekend selection
$scope.disabled = function(date, mode) {

return ( mode === 'day' && ( date.getDay() === 0 || date.getDay() === 6 || 
$scope.date_occurences.indexOf( $filter('date')(date, 'yyyy-MM-dd') ) !== -1 ));
};

它可以按预期工作,除了一个小问题之外,当日期选择器调用“
disabled”功能时,该数组为空,等待我假定的异步回调。这就是为什么在禁用日期时在日期选择器中选择一个日期时首先使用它的原因。

因此,如何在调用日期选择器禁用功能之前获取回调,或者如何使其等待?一种选择可能是在回调到达后刷新Datepicker,但是我不确定该函数是否在日期选择器上存在。


问题答案:

我没有完全按照上述说明解决此问题,但有一些解决方法:

1.使用了一个我在堆栈溢出注释中找到的小代码http://plnkr.co/edit/Xwq7YtAD6qNHQw1aES3H?p=preview。通过该按钮,您可以使用按钮或其他类型的动作将Angular-
UI引导程序Datepicker称为“ refreshView”。基本上设置一个新指令

`app.directive('jmDpRefreshView',function() {
   var noop = function(){};
   var refreshDpOnNotify = function (dpCtrl) {
     return function() {
       dpCtrl.refreshView();
     };
   };
return {
  require: 'datepicker',
  link: function(scope,elem,attrs,dpCtrl) {
    var refreshPromise = scope[attrs.jmDpRefreshView];
    refreshPromise.then(noop,noop,refreshDpOnNotify(dpCtrl));
   } 
 };

});`

调用refreshView功能

$scope.toggleDisableMode = function() { dateDisableDeferred.notify(new Date().getTime()); };

可以使用任何类型的操作来调用功能toggleDisableMode,例如使用按钮来禁用服务器中的日期:“ ng-click
=’toggleDisableMode()’”

可能对您有所帮助的另一件事是,您可以从服务器预加载日期

//preload
$scope.dates = disable_dates();

function disable_dates() {
    console.log("disable dates function")
    Dates.async().then(function() {
        $scope.data = Dates.data();
        //do whatever you like with your data
    });
}

或者,当从服务器获取数据时,可以为延迟的调用“ .notify()”,完成后它将禁用。

    function disable_dates() {
    console.log("disable dates function")
    Dates.async().then(function() {
        $scope.data = Dates.data();
        //console.log($scope.data )
        //do whatever you like with your server data.

        //notice this line, calls the disable function
        dateDisableDeferred.notify(new Date().getTime());
    });
}


 类似资料:
  • 问题内容: 我正在尝试使用JQuery Ui禁用特定日期。但是,我没有运气,这是我的代码: 实例化datepicker对象 获取日历中要禁用的日期 它似乎没有用,我知道如何解决这个问题。干杯。 问题答案: 好像您在一个输入上调用了两次。很难遵循您的代码,但是如果您重新组织代码并删除第二个调用,那么一切都会正常进行:

  • 我在我的Web应用程序中使用引导日期时间选择器,由PHP/HTML5和JavaScript制作。我目前正在使用一个:http://tarruda.github.io/bootstrap-datetimepicker/ 当我没有时间使用控件时,它不工作。它只显示一个空白文本框。 我只想从日期时间选择器中删除时间。有什么解决办法吗?

  • 我正在尝试实现这里介绍的日期时间选择器https://eonasdan.github.io/bootstrap-datetimepicker/#minimum-安装程序,我已将文件文件下载到目录和。但当点击图标时,日历不会弹出。

  • 问题内容: 我想在的日期选择器中禁用特定的日期。 我正在使用CSS作为组件。 我要禁用的日期将根据组合中先前值的选择而动态更改。 我相信应该可以,尽管不确定。 我怎样才能做到这一点 ? 问题答案: 我假设您正在使用Angular-UI中的指令。该属性使您可以禁用某些日期(例如,周末)。看到这个笨蛋http://plnkr.co/edit/gGAU0L?p=preview 如果要基于选择动态禁用日期

  • 我正在使用来自http://www.eyecon.ro/bootstrap-datepicker/ 但是Firebug显示日期在以下行的bootstrap-datepicker.js文件中未定义。 javascript文件和css工作正常 并使用

  • 在grails中,通过使用jQuery UI插件,如何将域属性(日期周日期)设置为用户使用日期选择器功能选择的日期?