需要帮助来验证 angular jquery UI datepicker 指令

Posted

技术标签:

【中文标题】需要帮助来验证 angular jquery UI datepicker 指令【英文标题】:Need Help to validate angular jquery UI datepicker directive 【发布时间】:2016-10-09 15:06:26 【问题描述】:

我正在使用 jQuery-UI datepicker 创建一个 angularjs 指令,我在 angularjs 中正式使用它,但停留在验证部分。我在 from 和 to date 中都使用了这个指令,我需要验证 to date 不大于 from date,我在下面发布了我的指令代码供您参考。请纠正我关于要完成的验证。

app.directive("datePicker", function () 
return 
    restrict: "A",
    require: "ngModel",
    link: function (scope, elem, attrs, ngModel) 
        var updateModel = function (dateText)   
            ngModel.$render = function () 
                scope.$apply(function () 
                    ngModel.$setViewValue(dateText);
                    console.log(dateText);
                );
                ;

        ;
        var options = 
            dateFormat: "mm/dd/yy",
            onSelect: function (dateText) 
                updateModel(dateText);
            ,
            showButtonPanel: true
        ;
        elem.datepicker(options);
    
;

);

正式使用 angularjs 指令的 Json 文件

[
"id": "fromdate",
"key": "fromdate",
"type": "input",
"ngModelAttrs": 
    "datePicker": 
        "attribute": "date-picker"
    
,
"templateOptions": 
    "required": true,
    "datePicker": "",
    "label": "From Date :"


, 
"id": "todate",
"key": "todate",
"type": "input",
"ngModelAttrs": 
    "datePicker": 
        "attribute": "date-picker"
    
,
"templateOptions": 
    "required": true,
    "datePicker": "",
    "label": "To Date :"

]           

【问题讨论】:

到日期应该更高? @gayathri 是的,日期应该大于起始日期 【参考方案1】:

您好,请检查此设计可能未对齐

html

<!doctype html>
<html ng-app="plunker" >
<head>
  <meta charset="utf-8">
  <title>AngularJS Plunker</title>
  <script>document.write('<base href="' + document.location + '" />');</script>
  <link rel="stylesheet" href="style.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script>
  <script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
  <h1> Selected date: date2</h1>
  <h1> Selected date: todate</h1>

  <input type="text" ng-model="date2" valueupdate="date2"  datepicker pie-chart-limit-progress-bar="todate" />

  <input type="text" ng-model="todate" datepicker   />

</body>
</html>

在 script.js 中

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) 
  $scope.date2 = '19/03/2013';
);


app.directive('datepicker', function() 
    return 
        restrict: 'A',   
        require : 'ngModel',

        link : function (scope, element, attrs, ngModelCtrl) 
            $(function()
                element.datepicker(
                    dateFormat:'dd/mm/yy',
                    onSelect:function (date) 
                        ngModelCtrl.$setViewValue(date);
                        scope.valueupdate = date;
                          scope.$apply(); 
                    
                );
            );
        
    
);
app.directive('pieChartLimitProgressBar',['$compile', function ($compile) 
  return 
    restrict: 'A',
    scope: 
        percent: "=pieChartLimitProgressBar",        
        valueupdate: '='
    ,
    link: function (scope, elem, attr, ctrl) 

      scope.$watch('displayvalue', function(value) 

console.log(value);
      );

      scope.$watch('percent', function(value)         

        if(scope.valueupdate != undefined && value != undefined)
        
          var from = scope.valueupdate.split("/");
         var fromdate = new Date(from[2], from[1] - 1, from[0]);
         var todate = value.split("/");
         var todatevalue = new Date(todate[2], todate[1] - 1, todate[0]);
          console.log(fromdate , todatevalue)

          if (fromdate > todatevalue ) 
             var myEl = angular.element( document.querySelector( '#divID' ) );
               myEl.empty();
             var tpl = '<div id="divID"  ng-show = true style="color:red">TO Date should be HIgher</div>' ;
                var el = $compile(tpl)(scope);
                elem.after(el);
          
          else
          
            var myEl = angular.element( document.querySelector( '#divID' ) );
               myEl.empty();

          
        




      );

    

;
]); 

供参考http://plnkr.co/edit/lolRZ1GdIiXNb25NwfZR?p=preview

【讨论】:

你知道我如何在 JSON 文件中以角度形式引用它 对不起,一旦用户手动选择,我就无法理解您的问题,那么只有您可以检查从哪里到哪里更大的日期? 功能部分是检查 from 和 to date 是否正确,但我使用 angularjs 正式不是纯 HTML 文件,所以我必须参考这部分 datepicker pie-chart-limit-progress-bar ="todate"(在 HTML 中)到 JSON 文件(我已粘贴在问题中)你得到我的问题了吗?.. 如果你想从 JSON 中读取,你可以直接在控制器中比较响应两个日期并显示简单的错误消息,如果你想执行选择日期选择器,请按照上述操作 让我们continue this discussion in chat.

以上是关于需要帮助来验证 angular jquery UI datepicker 指令的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Jquery 更改 Angular-UI 元素属性

需要帮助将代码从 jQuery 调整为 Angular

使用 Angular 和 jquery 验证输入字段?

在 iframe 中跨域加载 Angular UI

如何为使用 jQuery 呈现的 UI 元素设置不显眼的验证

Angular4 找不到 Jquery-UI 函数