微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【AngularJS: Up & Running】第04章_表单、输入和服务

1 ng-model的使用

ng-model指令:进行数据的双向绑定

<input type="text" ng-model="ctrl.username"> You typed {{ctrl.username}}
angular.module('notesApp',[])
    .controller('MainCtrl',[function () {
        this.username = 'nothing';
}]);

2 表单的使用

<form ng-submit="ctrl.submit();">
    <input type="text" ng-model="ctrl.user.username">
    <input type="password" ng-model="ctrl.user.password">
    <input type="submit" value="submit">
</form>
var self = this;
self.submit = function () {
    console.log('User clicked submit with ',self.user);
};

3 使用数据绑定和模型

HTML:

<form ng-submit="ctrl.submit1();">
    <input type="text" ng-model="ctrl.username">
    <input type="password" ng-model="ctrl.password">
    <input type="submit" value="submit">
</form>
<form ng-submit="ctrl.submit2();">
    <input type="text" ng-model="ctrl.user.username">
    <input type="password" ng-model="ctrl.user.password">
    <input type="submit" value="submit">
</form>

JS:

var self = this;
self.submit1 = function () {
    //创建了一个代表用户的对象并发送给服务器
    var user = {username:self.username,password:self.password};
    console.log('First form submit with ',user);
};
self.submit2 = function () {
    console.log('Second form submit with ',self.user);
};

4 表单状态及验证

HTML

<form ng-submit="ctrl.submit();" name="myForm">
    <input type="text" ng-model="ctrl.user.username" required ng-minlength="4">
    <input type="password" ng-model="ctrl.user.password" required>
    <input type="submit" value="Submit" ng-disabled="myForm.$invalid"><!-- 通过表单名访问表单状态 -->
</form>

JS

angular.module('notesApp',[function () {
        var self = this;
        self.submit = function () {
            console.log('User clicked submit with ',self.user);
        };
    }]);

4.1 AngularJS中表单的状态属性

表单状态名 作用
$invalid 一旦有任何验证没有通过(包括必须验证、最小长度验证等),AngularJS就会为表单设置$invalid属性
$valid $invalid状态正好相反,它表示所有验证都通过了
$pristine AngularJS中所有的表单状态都是$pristine。它代表了用户是否已经输入或者修改过表单元素。可能的用途:当表单处于$pristine状态时,让reset按钮不可用(disabe)
$dirty $pristine正好相反,它表示用户已经修改了数据(用户可以撤销修改内容,但dirty属性已经被设置了)
$error 它为每一个表单提供了如下信息:哪些输入控件出现了错误以及错误类型。

4.2 AngularJS内置的验证器

验证器 作用
required 确保内容不为空,直到填入相应内容之前,这个字段始终被标记称$invalid
ng-required required要求字段始终非空,而ng-required则不同,它根据表达式的返回值俩决定字段是否是必须的
ng-minlength 字符的最小长度
ng-maxlength 字符的最大长度
g-pattern 字段必须匹配某个正则表达式
type=”email” 字段必须是一个合法的邮件地址
type=”number” 字段必须是一个有效的数字,还可以通过指定min和max属性来限制数字的范围
type=”date” 如果浏览器支持,那么该字段将会显示一个HTML日期选择器。如果不支持,那么认情况下它会显示一个文本输入框ng-model中所绑定的字段,将会是yyyy-mm-dd格式的日期对象,比如2016-09-23
type=”url” 字段必须是一个合法的URL链接地址

出了上述验证器之外,用户也可以编写自定义验证器。

5 显示错误信息

ng-show的使用

<form ng-submit="ctrl.submit();" name="myForm">
    <input type="text" name="uname" ng-model="ctrl.user.username" required ng-minlength="4">
    <span ng-show="myForm.uname.$error.required">
 This is a required field
 </span>
    <span ng-show="myForm.uname.$error.minlength">
 Minimum length required is 4
 </span>
    <span ng-show="myForm.uname.$invalid">
 This field is invalid
 </span>
    <input type="password" name="pwd" ng-model="ctrl.user.password" required>
    <span ng-show="myForm.pwd.$error.required">
 This is a required field
 </span>
    <input type="submit" value="Submit" ng-disabled="myForm.$invalid">
</form>

6 根据状态修改表单样式

6.1 表单状态CSS class

表单状态 对应的CSS class
$invalid ng-invalid
$valid ng-valid
$pristine ng-pristine
$dirty ng-dirty

6.2 输入控件状态CSS class

输入控件状态 对应的CSS class
$invalid ng-invalid
$valid ng-valid
$pristine ng-pristine
$dirty ng-dirty
required ng-valid-required or ng-invalid-required
min ng-valid-min or ng-invalid-min
max ng-valid-max or ng-invalid-max
minlength ng-valid-minlength or ng-invalid-minlength
maxlength ng-valid-maxlength or ng-invalid-maxlength
pattern ng-valid-pattern or ng-invalid-pattern
url ng-valid-url or ng-invalid-url
email ng-valid-email or ng-invalid-email
date ng-valid-date or ng-invalid-date
number ng-valid-number or ng-invalid-number

6.3 不同方式高亮显示输入控件

HTML:

<form ng-submit="ctrl.submit();" name="myForm">
    <input type="text"
           class="username"
           name="uname"
           ng-model="ctrl.user.username"
           required
           ng-minlength="4">
    <input type="submit"
           value="Submit"
           ng-disabled="myForm.$invalid">
</form>

CSS:

<style> .username.ng-valid{ background-color: green; } .username.ng-dirty.ng-invalid-required{ background-color: red; } .username.ng-dirty.ng-invalid-minlength{ background-color: lightpink; } </style>

JS:

angular.module('notesApp',[])
            .controller('MainCtrl',[function () {
                var self = this;
                self.submit = function () {
                    console.log('User clicked submit with ',self.user);
                };
            }]);

7 ng-form与内嵌表单

AngularJS提供了ng-form指令,它与form非常相近,同时又提供了内嵌功能,这样一来,我们就能将表单中的一些字段组合起来,当作一个自快进行处理。

<form novalidate name="myForm">
    <input type="text"
           class="username"
           name="uname"
           ng-model="ctrl.user.username"
           required=""
           placeholder="Username"
           ng-minlength="4" />
    <input type="password"
           class="password"
           name="pwd"
           ng-model="ctrl.user.password"
           placeholder="Password"
           required="" />
    <ng-form name="profile">
        <input type="text"
               name="firstName"
               ng-model="ctrl.user.profile.firstName"
               placeholder="First Name"
               required>
        <input type="text"
               name="middleName"
               placeholder="Middle Name"
               ng-model="ctrl.user.profile.middleName">
        <input type="text"
               name="lastName"
               placeholder="Last Name"
               ng-model="ctrl.user.profile.lastName" required>
        <input type="date"
               name="dob"
               placeholder="Date Of Birth"
               ng-model="ctrl.user.profile.dob" required>
    </ng-form>
    <span ng-show="myForm.profile.$invalid">
        Please fill out the profile information
    </span>

    <input type="submit"
           value="Submit"
           ng-disabled="myForm.$invalid">
</form>
  • 1 通过ng-form指令创建出子菜单用户可以给该表单分配名称,用于获取它本身和它的状态
  • 2 子表单的状态的既能直接通过 (子表单名. valid访访.. invalid)
  • 3 表单中的每一个元素都可以通过普通方式(表单名.firstName.$error.required)访问
  • 4 子表单和内嵌表单会影响外部表单(myForm.$invalid是true,因为使用了required

8 其他表单控件

<!--多行文本输入框(Textarea)-->
    <textarea ng-model="ctrl.user.address" required></textarea>
    <!--复选框(CheckBox)-->
    <input type="checkBox" ng-model="ctrl.user.agree" ng-true-value="YES" ng-false-value="NO">
    <!--单选框(RadioButton)-->
    <div ng-init="user = {gender:'female'}">
        <input type="radio" name="gender" ng-model="user.gender" value="male">
        <input type="radio" name="gender" ng-model="user.gender" value="female">
    </div>
    <!--下拉框(Combo Boxes/Drop-Downs)-->
    <div ng-init="location = 'India'">
        <select ng-model="location">
            <option value="USA">USA</option>
            <option value="India">India</option>
            <option value="Other">None of the above</option>
        </select>
    </div>

原文地址:https://www.jb51.cc/angularjs/148809.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐