[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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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工具