0

我正在尝试制作一个可重用的自定义指令,以验证输入字段中的日期。下面提供的代码可以正常工作,但是根本不能重用,这是我最担心的。我试图做的是在指令中设置一个新的范围,但是我得到了一个错误:

请求隔离范围的多个指令。

所以我想孤立的范围对我没有帮助。

还有其他解决方案吗?

这是我的第一个模板:

<form ng-submit="add()" name="addTask" class="form-horizontal">
  <input name="dateInput" is-date-valid type="text" class="form-control" ng-model="task.DueDate" datepicker-options="datepicker.options" ng-model-options="{ timezone: 'UTC' }" uib-datepicker-popup="mediumDate" is-open="isOpened" required>
</form>

这是我的第二个模板:

<form ng-submit="edit()" name="editTask" class="form-horizontal">
  <input name="dateInput" is-date-valid type="text" class="form-control" ng-model="task.DueDate" datepicker-options="datepicker.options" ng-model-options="{ timezone: 'UTC' }" uib-datepicker-popup="mediumDate" is-open="isOpened" required>
</form>

这就是我的自定义指令:

function isDateValid($log) {
  'ngInject';
  var directive = {
    restrict: 'A',
    require: 'ngModel',
    link: link
  };
  return directive;

  function link(scope, element, attrs, ctrl) {

    scope.$watch(attrs.ngModel, function () {
      var validation = can_i_get_this_from_controller ?

        if (validation) {
          ctrl.$setValidity('validation', true);
        } else {
          ctrl.$setValidity('validation', false);
        }
    });
  }
}

module.exports = isDateValid;
4

1 回答 1

1

你实现自定义验证器的方式不好,你应该做这样的事情 -

.directive('dateValidate', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function (scope, elem, attrs, ngModel) {
           ngModel.$validators.dateValidate = function(modelValue) {  
               //Your logic here, return true if success else false
           }
        }
    };
 });

它可以在两个表单路径上使用,所以这里不需要那个逻辑。要了解更多关于这些的信息,这是一个很好的资源

于 2017-05-29T12:11:33.437 回答