简单来说Angular.js是google开发者设计和开发的一套前端开发框架,帮助你简化前端开发的负担。到底能简化到什么程度呢,今天我们来看下,一行代码实现控件验证效果,有木有吓尿?

如上图所示,我们需要实现如下这些验证功能:

控件都是必输控件
都需要控制最大长度
第一次打开页面,控件不能显示为错误状态
输入内容再清空后,必输控件需要显示为错误状态
只有所有输入合法后,发布按钮才能变为可用状态
通过AngularJS,我们可以很轻松的实现这些要求,只需要1行JS代码。UI样式这里采用的是Bootstrap。先上示例代码:

HTML。

<!DOCTYPE html><html lang="zh-cn" ng-app="ftitApp"><head> <meta charset="utf-8" /> <title>Demo</title> <link href="/Content/bootstrap.css" rel="stylesheet"/> <script src="/Scripts/angular.js"></script></head><body> <div class="container body-content">  <!-- 主要内容区域 -->  <div class="row main-content">   <div class="col-md-9">    <!-- 联系我们表单区域 -->    <form action="/Contact/Create" method="post" role="form" name="createContactForm" ng-controller="ContactCreateController">     <!-- UserName 您的称呼 -->     <div class="form-group has-feedback" ng-class="{'has-success' : !createContactForm.UserName.$pristine && createContactForm.UserName.$valid, 'has-error' : !createContactForm.UserName.$pristine && createContactForm.UserName.$invalid }">      <label for="UserName">您的称呼*</label>      <input type="text" class="form-control" ng-model="userName" name="UserName" autofocus="" required ng-maxlength=30>      <div ng-show="!createContactForm.UserName.$pristine && createContactForm.UserName.$valid">       <span class="glyphicon glyphicon-ok form-control-feedback"></span>      </div>      <div ng-show="!createContactForm.UserName.$pristine && createContactForm.UserName.$invalid">       <span class="glyphicon glyphicon-remove form-control-feedback"></span>      </div>     </div>     <!-- UserMail 邮箱地址 -->     <div class="form-group has-feedback" ng-class="{'has-success' : !createContactForm.UserMail.$pristine && createContactForm.UserMail.$valid, 'has-error' : !createContactForm.UserMail.$pristine && createContactForm.UserMail.$invalid }">      <label for="UserMail">邮箱地址*</label>      <input type="email" class="form-control" ng-model="userMail" name="UserMail" required ng-maxlength=30>      <div ng-show="!createContactForm.UserMail.$pristine && createContactForm.UserMail.$valid">       <span class="glyphicon glyphicon-ok form-control-feedback"></span>      </div>      <div ng-show="!createContactForm.UserMail.$pristine && createContactForm.UserMail.$invalid">       <span class="glyphicon glyphicon-remove form-control-feedback"></span>      </div>     </div>     <!-- Subject 主题 -->     <div class="form-group has-feedback" ng-class="{'has-success' : !createContactForm.Subject.$pristine && createContactForm.Subject.$valid, 'has-error' : !createContactForm.Subject.$pristine && createContactForm.Subject.$invalid }">      <label for="Subject">主题*</label>      <input type="text" class="form-control" ng-model="subject" name="Subject" required ng-maxlength=100>      <div ng-show="!createContactForm.Subject.$pristine && createContactForm.Subject.$valid">       <span class="glyphicon glyphicon-ok form-control-feedback"></span>      </div>      <div ng-show="!createContactForm.Subject.$pristine && createContactForm.Subject.$invalid">       <span class="glyphicon glyphicon-remove form-control-feedback"></span>      </div>     </div>     <!-- Content 内容 -->     <div class="form-group has-feedback" ng-class="{'has-success' : !createContactForm.Content.$pristine && createContactForm.Content.$valid, 'has-error' : !createContactForm.Content.$pristine && createContactForm.Content.$invalid }">      <label for="Content">内容*</label>      <textarea cols="4" rows="5" class="form-control" ng-model="content" name="Content" required ng-maxlength=1000></textarea>      <div ng-show="!createContactForm.Content.$pristine && createContactForm.Content.$valid">       <span class="glyphicon glyphicon-ok form-control-feedback"></span>      </div>      <div ng-show="!createContactForm.Content.$pristine && createContactForm.Content.$invalid">       <span class="glyphicon glyphicon-remove form-control-feedback"></span>      </div>     </div>     <!-- 提交按钮 -->     <div class="form-group">      <div ng-show="createContactForm.$valid">       <input type="image" src="/Content/images/comment_publish_button.png" onsubmit="submit();" value="发布" ng-disabled='!createContactForm.$valid' />      </div>      <div ng-show="!createContactForm.$valid">       <img src="/Content/images/invalid_publish_button.png" />      </div>     </div>    </form>   </div>  </div> </div>  <script src="/Scripts/ftit/ContactCreateController.js"></script></body></html>

JS代码(真的只有一行哟)

ContractCreateController.js

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

这样就好啦。几个关键的地方解释一下:

ng-class:这个标签用来控制class的值。例如ng-class="{'has-success' : !createContactForm.Content.$pristine}的意思就是,如果!createContactForm.Content.$pristine的值为true,class的值就为has-success。
ng-show:控制是否显示该控件。
createContactForm.$valid:全部验证通过后,值为true,否则为false
createContactForm.Content.$valid:标识Content控件是否通过验证,通过为true,否则为false
createContactForm.Content.$pristine:标识Content控件是否从未输入过。从未输入为true,否则为false
更细节的技术问题请查看AngularJS的技术文档。

最新资讯
摩拜创始人胡玮炜仍在上海摩骑科技等公司担任法人

摩拜创始人胡玮炜仍在

天眼查App显示,目前,胡玮炜在贵安新区摩拜出行科技有限
百度为何收购YY直播?一个缺快钱,一个缺大钱

百度为何收购YY直播?一

百度需要可以快速变现的新业务;欢聚时代则需要更大量级
李健熙继承人面临100亿美元遗产税 或效仿LG用现金支付

李健熙继承人面临100

据报道,三星电子董事长李健熙(Lee Kun-hee)的继承人可能
极兔动了谁的蛋糕?遭快递巨头封杀背后或因拼多多剑指阿里

极兔动了谁的蛋糕?遭快

从国内快递巨头的一致反应来看,这场封杀事件搅动的不仅
产业链人士:台积电第六代CoWoS封装技术有望2023年投产

产业链人士:台积电第

据国外媒体报道,台积电是目前在芯片制程工艺方面走在行
名创优品跃龙门,然后呢?

名创优品跃龙门,然后呢

连续狂奔7年之后,名创优品接连获得了腾讯、高瓴资本的
最新文章
详解Vue的ref特性的使用

详解Vue的ref特性的使

这篇文章主要介绍了详解Vue的ref特性的使用,文中通过
vue学习笔记之slot插槽基本用法实例分析

vue学习笔记之slot插

这篇文章主要介绍了vue学习笔记之slot插槽基本用法,结
vue跳转方式(打开新页面)及传参操作示例

vue跳转方式(打开新页

这篇文章主要介绍了vue跳转方式(打开新页面)及传参操作,
vue学习笔记之过滤器的基本使用方法实例分析

vue学习笔记之过滤器

这篇文章主要介绍了vue学习笔记之过滤器的基本使用方
js获取本日、本周、本月的时间代码

js获取本日、本周、本

本篇文章给大家分享的内容是利用js如何获取本日、本周
node crawler如何添加promise支持

node crawler如何添加

这篇文章主要介绍了node crawler如何添加promise支持,