当前位置: 首页 > 知识库问答 >
问题:

Angularjs-ng模式和自定义验证都显示

齐思淼
2023-03-14

我创建了一个min和max指令,用于检查输入是否在范围之间。我还有一个ng模式验证。我正在使用ng消息显示我的验证。我遇到一个问题,即即使用户输入了正确的模式,“模式”的验证消息仍在显示。我只想显示范围超出范围的验证。这是html

 <form name="fee">

  <input type="text" name="fee_classi" ng-model="main.fee.I"
  ng-pattern="/^[0-1](\.\d{0,2}){0,1}$/" 
  my-range="1,1.75"/>

  <div role="alert" class="validation-errors" 
  ng-if="fee.fee_classi.$invalid && fee.fee_classi.$dirty"
  ng-messages="fee.fee_classi.$error">
    <p ng-message="range">Range should be between 1 to 1.75</p>
    <p ng-message="pattern">Format must be 0.00</p>

  </div>
</form>

这里是指令

app.directive('myRange', myRange);

function myRange() {
  var directive = {
    bindToController: true,
    controller: myRangeCtrl,
    controllerAs: 'vm',
    // link: link,
    restrict: 'A',
    scope: {},
    require: {
      ngModelCtrl: 'ngModel'
    }
  };
  return directive;
}

myRangeCtrl.$inject = ['$element', '$attrs'];

function myRangeCtrl($element, $attrs) {
  var vm = this;

  vm.min = 0; //default
  vm.max = 0; //default

  console.clear();
  console.log(vm.ngModelCtrl);
  var inRange = false;
  var rangeVal = $attrs.myRange.split(',');
  var userInput;
  console.log(rangeVal);
  vm.min = JSON.parse(rangeVal[0]);

  vm.max = JSON.parse(rangeVal[1]);


  $element.on('keypress', function(e) {
    console.log(e);
    console.log(vm.ngModelCtrl);

    //if the pattern is valid then lets check if the user has the proper range
    if (vm.ngModelCtrl.$valid) {
      vm.ngModelCtrl.$validators.range = function(modelValue, viewValue) {

        console.log('modelValue = ' + modelValue);

        inRange = _.inRange(modelValue, vm.min, vm.max);

        //check if modelValue can be converted to a number with isNaN function
        if (isNaN(modelValue)) {
          console.error('-VAlue is invalid');
          return false;
        }

        if (angular.isDefined(modelValue) &&
          modelValue[modelValue.length - 1] !== '.' &&
          modelValue !== '') {
          // console.log('modelValue = '+modelValue);
          userInput = JSON.parse(modelValue);

          if (inRange || userInput === vm.max) {
            console.info('VAlue is valid');
            //value entered is invalid
            return true;
          } else {
            console.error('VAlue is invalid');
            //value entered is valid
            return false;
          }
        }

        if (angular.isUndefined(modelValue)) {
          return true;
        }
        //lets do a regex test first


      };

    }

  });

这是柱塞

共有1个答案

司承业
2023-03-14

看看这个例子:https://docs.angularjs.org/api/ng/input/input[范围]你可能需要稍微调整一下以适应你的需要。

 类似资料:
  • 我有一个表单,如果复选框为false,则使用ng必需指令对文本输入进行验证。如果复选框为true,则该字段将被隐藏并且ng必需设置为false。 问题是,我在输入上还指定了一个用于验证的正则表达式,并且使用了ng模式角度指令。我遇到的问题是,如果用户填写了无效的电话号码,请选中该框以停用该输入(因此无需进一步验证),表单将不允许提交,因为它基于ng模式无效。 我试图通过添加一个ng change函

  • 问题内容: 我有一种形式,如果复选框为false,则使用ng-required指令对文本输入强制执行验证。如果复选框为true,则该字段被隐藏,并且ng- required设置为false。 问题是我还使用ng-pattern angular指令在输入上指定了用于验证的正则表达式。我遇到的问题是,如果用户填写了无效的电话号码,请选中该框以停用该输入(因此无需进一步验证),则该表单将不允许提交,因为

  • 问题内容: 我是AngularJS的新手,我正在构建一个小型的概念验证租车清单应用程序,该应用程序会提取一些JSON,并通过ng- repeat并使用几个过滤器来呈现这些数据的各个部分: 现在,我想在控制器中创建一个自定义过滤器,该过滤器可以迭代ng-repeat中的项目,并仅返回满足特定条件的项目-例如,我可以根据哪个“ provider”复选框创建值数组进行检查,然后评估每个ng-repeat

  • 问题内容: 此自定义验证指令是官方角度网站上提供的示例。 http://docs.angularjs.org/guide/forms会 检查文本输入是否为数字格式。 为了对该代码进行单元测试,我编写了以下代码: 然后我得到这个错误: 我到处都放置了print语句以查看发生了什么,而且该指令似乎从未被调用过。测试像这样的简单指令的正确方法是什么? 问题答案: 另一个答案的测试应写为: 请注意,now

  • 表单验证发生在数据验证之后。如果你需要定制化这个过程,有几个不同的地方可以修改,每个地方的目的不一样。表单处理过程中要运行三种类别的验证方法。它们通常在你调用表单的is_valid() 方法时执行。还有其它方法可以触发验证过程(访问errors 属性或直接调用full_clean() ),但是通用情况下不需要。 一般情况下,如果处理的数据有问题,每个类别的验证方法都会引发ValidationErr

  • 我有一个示例 anjularjs 示例,它拉取 sku 详细信息数组,在选择下拉列表中显示价格和名称。现在我在下拉列表中选择了任何选项,它显示SKU名称和价格。 下面是我的选择标签,现在正在显示,sku名称和价格。 以下是我的skulist数据: 所以在这里,我的要求是下拉列表应该包含sku名称和价格,但一旦选择了值,然后只显示sku名称。