加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 比较两个日期的指令

发布时间:2020-12-17 17:48:12 所属栏目:安全 来源:网络整理
导读:我使用了以下代码来比较两个日期(参考 Custom form validation directive to compare two fields) define(['./module'],function(directives) {'use strict';directives.directive('lowerThan',[ function() { var link = function($scope,$element,$attrs,c
我使用了以下代码来比较两个日期(参考 Custom form validation directive to compare two fields)

define(['./module'],function(directives) {
'use strict';
directives.directive('lowerThan',[
 function() {

   var link = function($scope,$element,$attrs,ctrl) {
   ctrl.$setValidity('lowerThan',false);
   var validate = function(viewValue) {
    var comparisonModel = $attrs.lowerThan;                

    /*if(!viewValue || !comparisonModel){
      // It's valid because we have nothing to compare against
      //console.log("It's valid because we have nothing to compare against");
      ctrl.$setValidity('lowerThan',true);
    }*/

    // It's valid if model is lower than the model we're comparing against
    //ctrl.$setValidity('lowerThan',parseInt(viewValue,10) <    parseInt(comparisonModel,10) );        
    if(comparisonModel){       
        var to = comparisonModel.split("-");        
        var t = new Date(to[2],to[1] - 1,to[0]);
    }
    if(viewValue){
      var from=viewValue.split("-");
      var f=new Date(from[2],from[1]-1,from[0]);
    }

    console.log(Date.parse(t)>Date.parse(f));
    ctrl.$setValidity('lowerThan',Date.parse(t)>Date.parse(f));        
    return viewValue;
  };

  ctrl.$parsers.unshift(validate);
  ctrl.$formatters.push(validate);

  $attrs.$observe('lowerThan',function(comparisonModel){
    // Whenever the comparison model changes we'll re-validate
    return validate(ctrl.$viewValue);
  });

};

return {
  require: 'ngModel',link: link
};

 }
 ]);
 });

但是第一次加载页面时会显示错误消息.我尝试过使用ctrl.$setValidity(‘lowerThan’,false);使它第一次看不见.但它不起作用.

这是相同的plunker.
http://plnkr.co/edit/UPN1g1JEoQMSUQZoCDAk?p=preview

解决方法

你的指示没问题.您在控制器内设置日期值,并且您将较低的日期设置为较高的值,这意味着日期在加载时无效.你的指令正确检测到了.如果您不希望您的指令在加载时验证您的数据,那么您需要三件事:

>删除$attrs.$observe
>创建并将moreThan指令应用于其他字段
>告诉您的指令不要应用于模型值($formatters数组),而只应用于输入值($parsers数组).

PLUNKER

'use strict';
var app = angular.module('myApp',[]);

app.controller('MainCtrl',function($scope) {
  $scope.field = {
    min: "02-04-2014",max: "01-04-2014"
  };

});

app.directive('lowerThan',[
  function() {

    var link = function($scope,ctrl) {

      var validate = function(viewValue) {
        var comparisonModel = $attrs.lowerThan;
        var t,f;

        if(!viewValue || !comparisonModel){
          // It's valid because we have nothing to compare against
          ctrl.$setValidity('lowerThan',true);
        }
        if (comparisonModel) {
            var to = comparisonModel.split("-");
            t = new Date(to[2],to[0]);
        }
        if (viewValue) {
            var from = viewValue.split("-");
            f = new Date(from[2],from[1] - 1,from[0]);
        }

        ctrl.$setValidity('lowerThan',Date.parse(t) > Date.parse(f));
        // It's valid if model is lower than the model we're comparing against

        return viewValue;
      };

      ctrl.$parsers.unshift(validate);
      //ctrl.$formatters.push(validate);

    };

    return {
      require: 'ngModel',link: link
    };

  }
]);

app.directive('higherThan',ctrl) {

      var validate = function(viewValue) {
        var comparisonModel = $attrs.higherThan;
        var t,f;

        if(!viewValue || !comparisonModel){
          // It's valid because we have nothing to compare against
          ctrl.$setValidity('higherThan',from[0]);
        }

        ctrl.$setValidity('higherThan',Date.parse(t) < Date.parse(f));
        // It's valid if model is higher than the model we're comparing against

        return viewValue;
      };

      ctrl.$parsers.unshift(validate);
      //ctrl.$formatters.push(validate);

    };

    return {
      require: 'ngModel',link: link
    };

  }
]);
<form name="form" >

  Min: <input name="min" type="text" ng-model="field.min" lower-than="{{field.max}}" />
  <span class="error" ng-show="form.min.$error.lowerThan">
    Min cannot exceed max.
  </span>

  <br />

  Max: <input name="max" type="text" ng-model="field.max" higher-than="{{field.min}}" />
  <span class="error" ng-show="form.max.$error.higherThan">
    Max cannot be lower than min.
  </span>

</form>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读