`
hudeyong926
  • 浏览: 2034825 次
  • 来自: 武汉
社区版块
存档分类
最新评论

AngularJS $watch变量监视

 
阅读更多

在使用AngulaJS编写应用时,我们经常需要做的一件事情就是对模型中的变量进行监视,并对其发生的变化做出相应的回应。如:购物车小计。

AngularJS为我们提供了一个非常方便的$watch方法,它可以帮助我们在每个scope中监视其中的变量。下面是一个非常简单的例子:

$scope.name = 'zhangsan';

$scope.count = 0;

$scope.cart = [
    {id:1,name:'iphone5s',quantity:3,price:4300},
    {id:2,name:'iphone5c',quantity:30,price:3300},
    {id:3,name:'mac',quantity:3,price:14300},
    {id:4,name:'ipad',quantity:100,price:2000}
];

// 监听一个model 当一个model每次改变时 都会触发第2个函数
$scope.$watch('name', function(newValue, oldValue) {
    // console.log(newValue+ '===' +oldValue);
    ++$scope.count;

    if ($scope.count > 3) {
        $scope.name = '已将大于3次了';
    }
});

$scope.$watch('cart', function(newValue, oldValue) {
    // console.log(newValue);
    angular.forEach(newValue, function(item, key) {
        if(item.quantity < 1) {
            var returnKey = confirm('是否从购物车内删除该产品');
            if(returnKey) {
                $scope.remove(item.id);
            }else{
                item.quantity = oldValue[key].quantity;
            }
            return ;
        }
    });
}, true); ////检查被监控的对象的每个属性是否发生变化

上面的这段代码非常简单,它用$watch来对$scope中的name进行监视,并在它发生变化的时候将$rootScope中的count属性增加1。因此,每当我们对name进行一次修改时,下面显示的change count数字就会增加1,当count>3时,改变name的值。

在AngularJS内部,每当我们对ng-model绑定的name属性进行一次修改,AngularJS内部的$digest就会运行一次,并在运行结束之后检查我们使用$watch来监视的东西,如果和进行上一次$digest之前相比有了变化,则执行我们在其中绑定的处理函数。

分享到:
评论

相关推荐

    浅谈angularJS的$watch失效问题的解决方案

    $watch方法,它可以帮助我们在每个scope中监视其中的变量。 $watch 单一的变量 对于普通的变量时,如数字,字符串等,直接如下写是可以监视到变量的变化,并执行相应的函数的。 $scope.count=1; $scope.$watch('...

    AngularJS中的$watch(),$digest()和$apply()区分

    在AngularJS的Scope对象上,使用$scope.$watch()方法可以监视作用域内变量的变化,并在变化发生时执行特定的操作。$watch()接受三个参数:第一个参数watchExpression是一个可以是字符串或者函数,用于指定需要监视的...

    Angular中的$watch、$watchGroup、$watchCollection

    `$watchCollection`是介于`$watch`和`$watch`之间的一个选择,专门用于监视数组和对象的元素级变化。与`$watch`不同,`$watchCollection`会在数组元素或对象属性添加、删除或改变时触发。这样,即使不改变对象引用...

    angular $watch 一个变量的变化(实例讲解)

    在给定的实例中,我们看到一个具体的 `$watch` 使用示例,用于监视 `custArea` 变量的变化,并在发生变化时执行特定的操作。 首先,我们需要了解 `$watch` 的基本语法: ```javascript $scope.$watch('expression'...

    深入解析AngularJS框架中$scope的作用与生命周期

    这个过程中,$scope对象会注册需要运行的函数,即$watch函数,这些函数用来监视数据变化。 3. **变化阶段**:当视图中绑定的数据发生变化时,或者当执行了某个操作导致数据发生变化时,$scope对象会进行脏值检测...

    AngularJS Handbook_ Easy Web App Development

    - **$digest()**: 触发一次消化循环,在这个循环中AngularJS会检查所有被监视的模型是否发生了变化。 - **$apply()**: 触发一次消化循环,并确保在非AngularJS上下文中(如定时器)所做的更改也能被正确检测到。 **...

    Angularjs 双向绑定时字符串的转换成数字类型的问题

    利用AngularJS的$watch监视器来监听模型变量的变化,一旦发现变量有变动就重新计算total值。这种方法可以保持模型变量的原始类型不变,而通过控制器中的逻辑来计算和更新需要以数字形式呈现的结果,有助于保持代码...

    AngularJS 工作原理详解

    - **$watch列表**:遍历并执行所有监视表达式的函数,确保视图与模型同步。 - **$evalAsync队列**:处理异步操作,确保在视图渲染前完成。 - **渲染视图**:$digest循环结束后,浏览器根据更新的数据渲染页面。 ...

    Angularjs自定义指令实现三级联动 选择地理位置

    例如,在地理位置选择中,当用户从下拉列表中选择一个选项时,我们可以通过`$watch`监视变化,并据此更新其他选择项。 4. **$http服务**: 在AngularJS中,`$http`服务用于发起HTTP请求。我们可以使用它从服务器端...

    详解AngularJS脏检查机制及$timeout的妙用

    在脏检查循环中,AngularJS会递归检查所有注册的watch表达式,如果发现数据有变化,就会触发相应的watcher函数来更新视图。这个过程会一直持续到所有watcher函数都不再报告数据变更为止。一旦完成一轮检查而没有发现...

    AngularJs实现聊天列表实时刷新功能

    $emit()是从子作用域向上冒泡事件到父作用域,而$watch()可以监视作用域中变量的变化并作出相应的响应。 AngularJS提供了一套完整的事件系统,帮助开发者在不同的作用域之间进行通信,这对于实现复杂的单页应用...

    AngularJS实现星星等级评分功能

    - 使用$watch来监视作用域变量的变化,以便及时更新星星状态。 9. 整合进控制器: - 最后,需要在AngularJS的控制器中定义max、ratingVal、hoverVal,并设置相应的事件处理函数。 - 可以设置默认值,使得在加载...

    watchOut

    在JavaScript中,`watch`是一个经常用于调试和动态监测变量值的特性,尤其是在Node.js环境中。 JavaScript中的`watch`功能通常涉及到对象观察和事件监听。例如,在Node.js中,`fs.watch()`方法可以监视文件系统的...

    Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法

    这是通过监视$scope.search变量并在$watch函数中检查是否含有敏感字来实现的。 在表单提交后,如果用户成功添加或修改信息,可以通过$scope.data数组来更新界面显示的用户列表。由于AngularJS实现了双向数据绑定,...

Global site tag (gtag.js) - Google Analytics