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之前相比有了变化,则执行我们在其中绑定的处理函数。

$watchAngularJS中的一个函数,用于监视一个表达式的变化并触发相应的回调函数。它可以用于监听对象的变化并执行相应的操作。 通过在控制器中使用$watch函数,可以监听一个model的变化,当model发生变化时,$watch函数会触发回调函数,并传递新值和旧值作为参数。 在上述引用的代码中,$watch函数的第一个参数是要监听的对象,可以是一个字符串表达式或一个函数。第二个参数是一个回调函数,当监听的对象发生变化时,这个函数会被触发。第三个参数是可选的,用于判断监听的对象的变化是否使用深比较。 总的来说,$watch函数是AngularJS中用于监听对象变化的重要工具,可以帮助我们实时监测和处理数据的变化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [angularjs $watch](https://blog.csdn.net/qianqianstd/article/details/75040501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [AngularJS--$watch用法 整理](https://blog.csdn.net/shi_6_tians/article/details/100102393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值