【问题标题】:How can I do ng-minlength, ng-maxlength validations correctly in angular.js?如何在 angular.js 中正确进行 ng-minlength、ng-maxlength 验证?
【发布时间】:2021-06-11 11:47:02
【问题描述】:

在项目中,requiredmax-size-numbermin-size-number 部分工作,但 patternminlengthmaxlength 部分不工作,

我该如何纠正这个问题?

这里是相关的代码部分;

<div ng-switch-when="TextBox">
  <label class="item item-input item-stacked-label">
         <span ng-if="haveHeader" class="input-label">{{header}}</span>
         <input  type="text"  style="width:100%"
                 event="component.events" 
                 validation="component"
                 ng-blur="isInAdminFormPage && checkTextTypeNumberValidation(component.shortName)"
                 name="name{{component.shortName}}" 
                 metadata="component.options" ng-disabled="isFormViewed"  string-to-date="component.options" ng-required="requiredValidation[component.shortName]"
                 ng-model="formData[component.shortName]" string-to-number="component.options" >
    </label>
  <br>

  <div ng-if="componentValidationType[component.shortName] == validationType.VALIDATION">
    <div style="color: red" ng-messages="getFormValidations(form.shortName)['name'+component.shortName].$error" ng-show="isInAdminFormPage && formInf.mainForm.$submitted">
      <div ng-message="required">{{message["required"]}}</div>
      <div ng-message="minlength">{{message["minlength"]}}</div>
      <div ng-message="maxlength">{{message["maxlength"]}}</div>
      <div ng-message="ng-pattern">{{message["ng-pattern"]}}</div>
    </div>
    <div ng-if="isInAdminFormPage" style="color: red" ng-show="showValidationMessageOfTextBox(component.shortName)  && formInf.mainForm.$submitted">
      <div ng-show="!maxNumberValidation[component.shortName].validation">{{message["max-number-size"]}}</div>
      <div ng-show="!minNumberValidation[component.shortName].validation">{{message["min-number-size"]}}</div>

    </div>
  </div>

使用这些验证的地方的图片:

【问题讨论】:

  • 您能否也展示一个包含这些验证属性的输入示例?
  • 那张图片对我刚刚添加的问题有帮助吗?
  • 那里有一个文本框,无论我为验证写什么,它都应该给我那个消息,必需的,最小数字大小,最大数字大小工作,但是 ng-pattern,ng- minlength,ng-maxlength 不起作用
  • 实际上您的代码中没有文本框元素。也许我误解了您要做什么,但是要应用 ng-validations,我们需要一个表单输入元素来运行它们
  • 请将创建该屏幕截图的所有代码放入您的问题中。就像
    标记中的所有内容一样。您要验证一个表单元素,我们需要查看它的代码。您显示的代码只是错误消息html,而不是表单元素。

标签: angularjs validation


【解决方案1】:

很难复制您的示例,但我认为这将为您提供集成 ng-patternng-minlengthng-maxlength 所需的所有信息,以及如何监听它们的验证器。

'use strict';

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

app.controller('MainCtrl', ['$scope', function($scope) {
  $scope.theInput = '';
  $scope.minlength = 5;
  $scope.maxlength = 10;
  $scope.thePattern = /^[a-zA-Z\s]*$/; ///^[a-zA-Z]\w{3,14}$/;

  $scope.theNumberInput = '';
  $scope.theNumberPattern = /^((?!5)[0-9]){1,3}$/; ///^[a-zA-Z]\w{3,14}$/;


}]);
.error {
  margin: 10px 0;
  padding: 5px;
  background-color: #eee;
  color: #f00;
  border: 1px solid #ccc;
}

input.ng-dirty.ng-invalid {
  background-color: #f65b90;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.9/angular.min.js"></script>
<div id="mainContainer" ng-app="app" ng-controller="MainCtrl">
  <ng-form role="form" name="theForm" novalidate>
    <p>
      Enter a word between 5 and 10 characters long - no numbers, no periods
    </p>
    <input type="text" ng-required="true" name="theInput" ng-model="theInput" ng-maxlength="{{maxlength}}" ng-minlength="{{minlength}}" ng-pattern='thePattern' />
    <div class='feedback' ng-if='theForm.$dirty'>
      <div ng-show="!theForm.theInput.$valid" class="error">
        Not valid
      </div>
      <div ng-show="theForm.theInput.$error.pattern" class="error">
        Input pattern is not valid.
      </div>
      <div ng-show="theForm.theInput.$error.minlength" class="error">
        Input length is less than the min length ({{minlength}}) </div>
      <div ng-show="theForm.theInput.$error.maxlength" class="error">
        Input length is greater than the max length ({{maxlength}})
      </div>
    </div>
    <p>
      Enter a number between 1 and 999 with no 5's in it
    </p>
    <input type="number" ng-required="true" name="theNumberInput" ng-model="theNumberInput" ng-pattern='theNumberPattern' />
    <div class='feedback'>
      <div ng-show="theForm.theNumberInput.$error.pattern" class="error">
        Input pattern is not valid.
      </div>

    </div>
  </ng-form>
</div>

【讨论】:

  • 非常感谢您花时间回答。我将尝试理解您的代码:)
  • AngularJS 看起来很奇怪,但一旦你深入了解它实际上非常简单(大部分)。Angular 2+ 完全是另一回事,你可能知道。参加 udemy 课程,您就会跟上进度
  • 您好,先生,您能在空闲时间看看我的问题吗? stackoverflow.com/questions/67980687/…
猜你喜欢
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 2013-09-02
  • 1970-01-01
相关资源
最近更新 更多