AngularJs学习之路(十)

来源:互联网 发布:什么是数据库营销 编辑:程序博客网 时间:2024/05/22 16:50

AngularJS $watch

$watch方法,它可以帮助我们在每个scope中监视其中的变量。

单一变量
$watch 对于普通的变量时,如数字,字符串等,直接如下写是可以监视到变量的变化,并执行相应的函数的。
$scope.count=1;$scope.$watch('count',function(){...});
多变量$watch 
//当count或page变化时,都会执行这个匿名函数$scope.count=1;$scope.page=1;$scope.$watch('count + page',function(){...});
对象或者数组
$scope.items=[{a:1},{a:2}{a:3}];$scope.$watch('items',function(){...},true);

DEMO
angular.module('myApp', []).controller('userCtrl', function($scope) {$scope.fName = '';$scope.lName = '';$scope.passw1 = '';$scope.passw2 = '';$scope.users = [{id:1, fName:'Hege', lName:"Pege" },{id:2, fName:'Kim',  lName:"Pim" },{id:3, fName:'Sal',  lName:"Smith" },{id:4, fName:'Jack', lName:"Jones" },{id:5, fName:'John', lName:"Doe" },{id:6, fName:'Peter',lName:"Pan" }];$scope.edit = true;$scope.error = false;$scope.incomplete = false; $scope.editUser = function(id) {  if (id == 'new') {    $scope.edit = true;    $scope.incomplete = true;    $scope.fName = '';    $scope.lName = '';    } else {    $scope.edit = false;    $scope.fName = $scope.users[id-1].fName;    $scope.lName = $scope.users[id-1].lName;   }};$scope.$watch('passw1',function() {$scope.test();});$scope.$watch('passw2',function() {$scope.test();});$scope.$watch('fName', function() {$scope.test();});$scope.$watch('lName', function() {$scope.test();});$scope.test = function() {  if ($scope.passw1 !== $scope.passw2) {    $scope.error = true;    } else {    $scope.error = false;  }  $scope.incomplete = false;  if ($scope.edit && (!$scope.fName.length ||  !$scope.lName.length ||  !$scope.passw1.length || !$scope.passw2.length)) {     $scope.incomplete = true;  }};});