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

如何向AngularJS表单添加自定义验证?

鱼阳伯
2023-03-14

FormController.$setValide中有一个方法,但它看起来不像是一个公共API,所以我宁愿不使用它。创建自定义指令并使用NGModelController看起来是另一种选择,但基本上需要为每个自定义验证规则创建一个指令,而我不希望这样做。

实际上,在最简单的场景中,将控制器中的某个字段标记为无效(同时保持FormController同步)可能是我完成任务所需要的,但我不知道如何做到这一点。

共有1个答案

谭志用
2023-03-14

编辑:下面添加了关于ngMessages(>=1.3.x)的信息。

因为这是一个顶级的结果,如果你谷歌“角表单验证”,目前,我想添加另一个答案,为任何人从那里来。

在FormController.$SetValidity中有一个方法,但它看起来不像是一个公共API,所以我宁愿不使用它。

app.directive('blacklist', function (){ 
   return {
      require: 'ngModel',
      link: function(scope, elem, attr, ngModel) {
          var blacklist = attr.blacklist.split(',');

          //For DOM -> model validation
          ngModel.$parsers.unshift(function(value) {
             var valid = blacklist.indexOf(value) === -1;
             ngModel.$setValidity('blacklist', valid);
             return valid ? value : undefined;
          });

          //For model -> DOM validation
          ngModel.$formatters.unshift(function(value) {
             ngModel.$setValidity('blacklist', blacklist.indexOf(value) === -1);
             return value;
          });
      }
   };
});
<form name="myForm" ng-submit="doSomething()">
   <input type="text" name="fruitName" ng-model="data.fruitName" blacklist="coconuts,bananas,pears" required/>
   <span ng-show="myForm.fruitName.$error.blacklist">
      The phrase "{{data.fruitName}}" is blacklisted</span>
   <span ng-show="myForm.fruitName.$error.required">required</span>
   <button type="submit" ng-disabled="myForm.$invalid">Submit</button>
</form>

此外,我还写了一些关于这个主题的博客文章,其中涉及了更多的细节:

角形验证

自定义验证指令

var app = angular.module('myApp', ['ngMessages']);
<form name="personForm">
  <input type="email" name="email" ng-model="person.email" required/>

  <div ng-messages="personForm.email.$error">
    <div ng-message="required">required</div>
    <div ng-message="email">invalid email</div>
  </div>
</form>
 类似资料:
  • 问题内容: 我有一个带有输入字段和通过添加属性等进行验证设置的表单。但是对于某些领域,我需要做一些额外的验证。我将如何“利用” 控制的验证? 自定义验证可能类似于“如果填写了这3个字段,则此字段是必需的,并且需要以特定方式进行格式化”。 有一个方法,但是看起来不像公共API,所以我宁愿不使用它。创建自定义指令并使用它看起来像另一个选项,但是基本上需要我为每个自定义验证规则创建一个指令,而这是我所不

  • 我正在尝试添加一个自定义字段到忍者表单(第3.3节)。到处都找不到完整的例子。 仔细查看代码,似乎过滤器'ninja_forms_register_fields'可以起到作用,但我无法让它在任何地方运行。

  • 问题内容: 我有一个看起来像这样的表格: 它的设置使得输入数据后所有必填字段和“保存”按钮都可以使用。但是,部分验证是,我将使用输入的数据使用$ http通过POST通过服务器访问服务器。 我应该在函数中放置该逻辑还是有一个更好的放置位置? 更新: * 我实现了以下内容,将其作为元素上的属性应用,但它在每次我不喜欢的按键上调用服务器/数据库: 问题答案: 您不需要在指令中发出$ http请求,更好

  • 我有一个包含数据的表,我想在其中添加一个页脚,以便累加并显示每行中int值的总和。 我尝试了以下代码。 我的表格如下: 我的Vue数据 我现在得到的只是一个反映页眉的页脚。 这是在引导Vue自定义头文档之后编写的,但在细节上非常粗略,没有提供如何添加真正自定义信息的真实信息。我只想我的模板显示在页脚。 编辑:好吧,我确实弄明白了以下几点。还是不是我想要的。 我意识到Bootstrap-Vue设置的

  • 我有一个WordPress菜单,其中有一些菜单项是我通过标准(拖放)WordPress管理菜单功能添加的。最近,我不得不在菜单中添加另一项,以生成动态href链接。我在函数中使用以下代码实现了这一点。php文件: //将“我的个人资料”菜单项动态添加到“成员”菜单(根据当前登录的用户生成用户名) add_filter(wp_nav_menu_items、add_profilelink_in_men

  • 我的工具基本上读取PDF并在JTextArea中打印PDF的内容。在我的PDF包含阿拉伯语的PH Mirjan字体之前,一切正常。我的文本区域显示一些垃圾字符,如下所示。 我该如何解决这个问题? 我的文本区域的默认字体是Arial Unicode MS。我可以配置文本区域的字体吗?假设我在本地下载了PH Mirjan,如何将文本区域字体更改为下载的字体。非常感谢任何建议或参考链接。 编辑 这给了我