65.9K
CodeProject 正在变化。 阅读更多。
Home

AngularJS 中的验证

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.96/5 (11投票s)

2015年5月17日

CPOL

2分钟阅读

viewsIcon

55557

downloadIcon

942

在这里,我们将为我们的 AngularJS 应用添加验证逻辑。

更新: 我有一篇关于使用 ng-message 的 AngularJS 验证新特性的新文章。请点击这里查看:

https://codeproject.org.cn/Articles/992545/AngularJS-Validation

引言

我之前写过一篇关于使用 AngularJS 创建一个简单的 CRUD 应用的文章。链接在这里:An Overview of an AngularJS Project。现在,我想添加一个验证层,以确保输入的数据是有效的。对于这个技巧,我只会使用我的一些数据进行验证。

我将使用 Visual Studio 2013 社区版,并带有 AngularJS、Bootstrap 和 Jquery 等依赖项。

我有一个实时预览供您查看,请点击此链接查看:

http://tonyjen.github.io/AngularJSValidation/

背景

在 Web 应用程序中,验证一直都很困难。很多时候,需要使用框架来验证表单值。而且,这些框架通常不能在所有浏览器上工作。AngularJS 自带验证功能,现在创建在所有浏览器上都能工作的验证就容易多了。

这是验证功能应该看起来的样子截图:

Using the Code

表单

要初始化验证过程,您应该从一个 form 容器开始,如下所示:

<form name="tenantForm"> 

现在在 form 内部,您可以获取输入控件并向它们添加验证逻辑。

在验证场景中,我们通常有一些主要的属性需要验证。它们是“必需”、“最小值”、“最大值”、“模式”、“电子邮件”、“数字”和“URL”。

必需

此属性强制 form 在未输入 required 字段时无效。

<input type="text" required />

最小长度

此属性要求在接受输入之前至少有一定数量的字符。

<input type="text" ng-minlength=5 />

最大长度

此属性允许字符的最大长度,否则验证将失败。

<input type="text" ng-maxlength=20 />

模式匹配

此功能允许使用正则表达式进行自定义匹配。

<input type="text" ng-pattern="[a-zA-Z]" />

电子邮件匹配

Angular 提供了一个自定义电子邮件匹配功能。

<input type="email" name="email" ng-model="user.email" />

数字

这要求输入为数字格式才能进行验证。

<input type="number" name="age" ng-model="user.age" />

URL

这要求输入为链接格式才能进行验证。

<input type="url" name="homepage" ng-model="user.url" />

错误消息

创建输入控件后,我们现在需要一个地方来显示验证失败时的错误。我们首先从一个带有 error-container 的容器开始。然后,我们将遍历每种错误类型并显示正确的错误文本。

<div class="error-container"
   ng-show="tenantForm.FirstName.$dirty && tenantForm.FirstName.$invalid">
   <small class="text-danger"
      ng-show="tenantForm.FirstName.$error.required">
      Your name is required.
   </small>
   <small class="text-danger"
      ng-show="tenantForm.FirstName.$error.minlength">
      Your name is required to be at least 3 characters
   </small>
   <small class="text-danger"
      ng-show="tenantForm.FirstName.$error.maxlength">
      Your name cannot be longer than 20 characters
   </small>
</div>

在添加带有数据属性和错误消息类的表单控件后,应用程序将在每个输入控件中执行验证并显示任何验证错误。

整合

因此,在组合表单的输入和验证部分之后,HTML 将如下所示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Real Estate</title>
    <link href="Content/bootstrap.css" rel="stylesheet" />
    <link href="realEstateApp/site.css" rel="stylesheet" />
</head>
<body ng-app="realestateApp" class="ng-scope">
    <div class="panel panel-default">
      
        <div class="container" ng-controller="tenantsController" ngcloak>
            <h1>Tenants</h1>
            <div class="row">
                <div>
                    <button class="btn btn-primary" ng-click="previousTenant()">
                        Previous
                    </button>
                    <button class="btn btn-primary" ng-click="nextTenant()">
                        Next
                    </button>
                    <button class="btn btn-success" ng-click="addTenant()">
                        Add
                    </button>
                    <button class="btn btn-danger" ng-click="deleteTenant()">
                        Delete
                    </button>
                    <br style="clear:both">
                    <br>
                </div>
            </div>
            <form name="tenantForm" style="width: 500px">
                <div class="row">
                    <div ng-repeat="tenant in tenant">
                        <div>
                            <label>First Name: </label>
                            <input type="text"
                                   placeholder="First Name"
                                   name="FirstName"
                                   ng-model="tenant.FirstName"
                                   ng-minlength=3
                                   ng-maxlength=20 required />
                        </div>
                        <div class="error-container"
                             ng-show="tenantForm.FirstName.$dirty && tenantForm.FirstName.$invalid">
                            <small class="text-danger"
                                   ng-show="tenantForm.FirstName.$error.required">
                                Your name is required.
                            </small>
                            <small class="text-danger"
                                   ng-show="tenantForm.FirstName.$error.minlength">
                                Your name is required to be at least 3 characters
                            </small>
                            <small class="text-danger"
                                   ng-show="tenantForm.FirstName.$error.maxlength">
                                Your name cannot be longer than 20 characters
                            </small>
                        </div>
                        <div>
                            <label>Home Phone:</label>
                            <input type="number"
                                   placeholder="Home Phone"
                                   name="HomePhone"
                                   ng-model="tenant.HomePhone"
                                   ng-minlength=7
                                   ng-maxlength=10 required />
                        </div>
                            <div class="error-container"
                                 ng-show="tenantForm.HomePhone.$dirty && tenantForm.HomePhone.$invalid">
                                <small class="text-danger"
                                       ng-show="tenantForm.HomePhone.$error.required">
                                    Your home phone is required.
                                </small>
                                <small class="text-danger"
                                       ng-show="tenantForm.HomePhone.$error.minlength">
                                    Your home phone is required to be at least 7 digits
                                </small>
                                <small class="text-danger"
                                       ng-show="tenantForm.HomePhone.$error.maxlength">
                                    Your home phone cannot be longer than 10 digits
                                </small>
                                <small class="text-danger"
                                       ng-show="tenantForm.HomePhone.$error.number">
                                    Your home phone cannot be characters
                                </small>
                            </div>
                            <div>
                                <label>Email:</label>
                                <input type="email"
                                       placeholder="Email"
                                       name="Email"
                                       ng-model="tenant.Email"
                                       required />
                            </div>
                            <div class="error-container"
                                 ng-show="tenantForm.Email.$dirty && tenantForm.Email.$invalid">
                                <small class="text-danger"
                                       ng-show="tenantForm.Email.$error.required">
                                    Your email is required.
                                </small>
                                <small class="text-danger"
                                       ng-show="tenantForm.Email.$error.email">
                                    Your email is not valid
                                </small>
                            </div>
                            <div>
                                <label>Webpage:</label>
                                <input class="input-large"
                                       type="url"
                                       placeholder="Webpage"
                                       name="Webpage"
                                       ng-model="tenant.Webpage"
                                       required />
                            </div>
                            <div class="error-container"
                                 ng-show="tenantForm.Webpage.$dirty && tenantForm.Webpage.$invalid">
                                <small class="text-danger"
                                       ng-show="tenantForm.Webpage.$error.required">
                                    Your webpage is required.
                                </small>
                                <small class="text-danger"
                                       ng-show="tenantForm.Webpage.$error.url">
                                    Your webpage is not valid
                                </small>
                            </div>
                        </div>
                    </div>
            </form>
        </div>
    </div>

    <script src="Scripts/jquery-1.9.1.js"></script>
    <script src="Scripts/angular.js"></script>
    <script src="realEstateApp/realestateApp.js"></script>
    <script src="realEstateApp/controllers/tenantsController.js"></script>
    <script src="realEstateApp/services/tenantService.js"></script>
</body>
</html>

使用 AngularJS 进行验证比使用第三方 jquery 库更简单、更简洁。现在您的应用程序可以在不费太多力气的情况下进行验证。我提供了一个验证一些常见属性的应用程序示例,您可以扩展它或尝试创建自己的应用程序。

历史

  • 版本 1 205/5/16
© . All rights reserved.