AngularJS ng-model 验证及监听

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AngularJS ng-model 指令</title>

    <script src="../js/jquery-2.1.3.min.js"></script>
    <script src="../js/angular.min.js"></script>
    <style>
        /*
        ng-model 指令根据表单域的状态添加/移除以下类:
            ng-empty
            ng-not-empty
            ng-touched
            ng-untouched
            ng-valid
            ng-invalid
            ng-dirty
            ng-pending
            ng-pristine
        */
        input.ng-invalid { /*ng-model 指令基于它们的状态为 HTML 元素提供了 CSS 类*/
            background-color: lightcoral;
        }
    </style>
</head>
<body>

    <!--ng-model 指令可以将输入域的值与 AngularJS 创建的变量绑定。-->
    <!--<div ng-app="myApp" ng-controller="myController">
        <p>名字: <input type="text" ng-model="name"></p>
    </div>
    <script>
        var app = angular.module("myApp", []);
        app.controller("myController", function ($scope) {
            $scope.name = "Json De";
        });
    </script>-->

    <!--双向绑定,在修改输入域的值时, AngularJS 属性的值也将修改:-->
    <!--<div ng-app="myApp" ng-controller="myController">
        <p>名字: <input type="text" ng-model="name"></p> //ng-model 会自动将多个连续空格转换成一个空格
        <h2>你输入了:  {{name}}</h2>
    </div>
    <script>
        var app = angular.module("myApp", []);
        app.controller("myController", function ($scope) {
            $scope.name = "Json Den";
        });
    </script>-->

    <!--验证用户输入:AngularJS内部自己的邮箱验证-->
    <!--<form ng-app="" name="myForm">
        Email: <input type="email" name="myEmail" ng-model="my_email">
        <span ng-show="myForm.myEmail.$error.email">不是一个合法的邮箱地址</span>
    </form>-->

    <!--
        ng-invalid:未通过验证的表单
        ng-valid:布尔型属性,它指示表单是否通过验证。如果表单当前通过验证,他将为true
        ng-dirty:布尔值属性,表示用户是否修改了表单。如果为 ture,表示有修改过;false 表示修没有修改过
        ng-touched:布尔值属性,表示用户是否和控件进行过交互
        ng-pristine:布尔值属性,表示用户是否修改了表单。如果为ture,表示没有修改过;false表示修改过
        ng-error:验证错误信息
        $error的值为一个js对象,包含了以下验证内容的状态:
            email
            max
            maxlength
            min
            minlength
            number
            pattern
            required
            url
    -->
    <!--<form ng-app="" name="myForm" ng-init="myText = 'test@runoob.com'">
        Email:
        <input type="email" name="myAddress" ng-model="myText" required></p>
        <h1>状态</h1>
        {{myForm.myAddress.$valid}}
        {{myForm.myAddress.$dirty}}
        {{myForm.myAddress.$touched}}
    </form>-->

    <b>自定义验证规则:</b>
    <div ng-app="myApp" ng-controller="myCtrl">
        <ul>
            <li>姓: <input type="text" ng-model="xing"></li>
            <li>名: <input type="text" ng-model="ming"></li>
            <li>全名:<h4>{{xing + " " + ming}}</h4></li>
            <li>全名:<h3>{{fullName}}</h3></li>
            <li>全名:<h3>{{getFullName()}}</h3></li>
            <li>只能输入偶数:<input type="text" ng-model="evenNum" even-num></li>
        </ul>
    </div>
    <script>
        var app = angular.module("myApp", []);
        app.controller("myCtrl", function ($scope) {
            $scope.xing = "Tuang";
            $scope.ming = "ShuLin";
            $scope.fullName = $scope.xing + " " + $scope.ming;
            $scope.$watch("xing", function (newVal, oldVal, scope) { //$watch() 监听
                //console.log($scope == scope); //true
                scope.fullName = scope.xing + " " + scope.ming;
            });
            $scope.$watch("ming", function (newVal, oldVal, scope) {
                $scope.fullName = $scope.xing + " " + $scope.ming;
            });

            //还可以使用函数的形式
            $scope.getFullName = function () {
                return $scope.xing + " " + $scope.ming;
            }
        });
        app.directive('evenNum',function() {
            return {
                require: 'ngModel',
                link: function (scope, elm, attrs, ctrl) {
                    ctrl.$parsers.push(function (viewValue) {
                        if (viewValue % 2 == 0) {
                            ctrl.$setValidity('evenNum', true);
                            return viewValue;
                        } else {
                            ctrl.$setValidity('evenNum', false);
                            return viewValue;
                        }
                    });
                }
            }
        });
    </script>


</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值