[AngularJS] $scope.$watch

复制代码
/**
 * Created by Answer1215 on 11/13/2014.
 */

function MainCtrl($scope){

    function isLongEnough (pwd) {
        return pwd.length > 4;
    }

    function hasNumbers (pwd) {
        return /[0-9]/.test(pwd);
    }

    this.watchPwd =  function(newVal, oldVal){
        //first init, you might got undefined
        if (!newVal) return;
        $scope.reqs = [];

        if (!isLongEnough(newVal)) {
            $scope.reqs.push('Too short');
        }

        if (!hasNumbers(newVal)) {
            $scope.reqs.push('Must include numbers');
        }

        $scope.showReqs = $scope.reqs.length;
    }

    //user.password is a string
    //user is an object
    $scope.$watch('user.password',this.watchPwd);

    //$watch can accept the third argument, once add it, angularJS
    //will do lose value checking instead of reference checking, it's quite
    //expensive
    //in all $watch is expensive, use ng-change if you can
   // $scope.$watch('user.password',this.watchPwd, true);
}

angular.module('app',[])
    .controller('MainCtrl', MainCtrl);
复制代码

$watch can accept the third arguement, once set it as true:

$scope.$watch('user.password',this.watchPwd, true);

AngularJS will do lose value checking instead of reference checking, it is quite expensive.

For best pratise: avoid using $watch as much as you can, instead using ng-change.

<input ng-model="myModel" ng-change="callback">
<!--
  $scope.callback = function () {
    // go
  };
-->

 

复制代码
<!DOCTYPE html>
<html ng-app="app">
<head lang="en">
    <meta charset="UTF-8">
    <title>$watch</title>
    <script src="bower_components/angular/angular.min.js"></script>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"/>
    <style type="text/css">
        .panel {
            width: 70%;
            margin: 30px auto;
        }
    </style>
</head>
<body ng-controller="MainCtrl">

<div class="panel panel-primary">
    <div class="panel-heading">
        <h3 class="panel-title">Create Account</h3>
    </div>
    <div class="panel-body">
        <form role="form">
            <div class="form-group">
                <label for="eml">Email address</label>
                <input id="eml"
                        type="email"
                        class="form-control"
                        placeholder="Email address"
                        ng-model="user.email"/>
            </div>

            <div class="form-group">
                <label for="pwd">Password</label>
                <input id="pwd"
                       type="password"
                       class="form-control"
                       placeholder="Password"
                       ng-model="user.password" />
            </div>
            <button type="submit" class="btn btn-default">Submit</button>
        </form>
    </div>
</div>
<div class="panel panel-danger" ng-show="showReqs">
    <div class="panel-heading">
        <h3 class="panel-title">Password Requirement</h3>
    </div>
    <div class="panel-body">
        <ul>
            <li ng-repeat="req in reqs">{{req}}</li>
        </ul>
    </div>
</div>
<script src="app.js"></script>
</body>
</html>
复制代码

 

Read More: https://egghead.io/lessons/angularjs-the-basics-of-scope-watch

posted @   Zhentiw  阅读(513)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示