Angular中的$watch方法详解

发布时间 - 2026-01-11 03:17:57    点击率:

在$apply方法中提到过脏检查,首先apply方法会触发evel方法,当evel方法解析成功后,会去触发digest方法,digest方法会触发watch方法。

(1)$watch简介

在digest执行时,如果watch观察的的value与上一次执行时不一样时,就会被触发。

AngularJS内部的watch实现了页面随model的及时更新。

$watch方法在用的时候主要是手动的监听一个对象,但对象发生变化时触发某个事件。

(2)watch方法用法

$watch(watchFn,watchAction,deepWatch)

watchFn:angular表达式或函数的字符串

watchAction(newValue,oldValue,scope):watchFn发生变化会被调用

deepWatch:可选的布尔值命令检查被监控的对象的每个属性是否发生变化

$watch会返回一个函数,想要注销这个watch可以使用函数

(3)例子

在前面的例子中,当name的表单改变30次,然后触发某个事件。

控制器代码如下:

var firstController = function ($scope){
  $scope.name='张三';
  $scope.count=0;
  // 监听一个model 当一个model每次改变时 都会触发第2个函数
  $scope.$watch('name',function(newValue,oldValue){
    ++$scope.count;
    if($scope.count > 30){
      $scope.name = '已经大于30次了';
    }
  });
}

html代码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
  <div ng-app="">
    <div ng-controller="firstController">
      <input type="text" value="" ng-model="name"/>
      改变次数:{{count}}-{{name}}
    </div>
  </div>
  <script type="text/javascript" src="app/index.js"></script>
<script type="text/javascript" src="../../vendor/angular/angularjs.js"></script>
</body>
</html>

运行效果如下:

前30次可以随意修改:

当修改了30次后,name固定为'已经大于30次了':

这就是watch的作用,model每一次改变时都会触发第二个函数。

(4)watch的第三个参数

当监听的为一个对象或者数组时,例如:

 $scope.data = {
    name :'李四',
    count:20
  }

此时data里的name和count都要监听,那么可以这么写:

  $scope.$watch('data',function(){
  },true)

如果不加第三个参数,那么只会监听data,只有当data引用改变时才会触发。

因此当需要监听一些引用对象需要把第三个参数设置成true。

总结

以上所述是小编给大家介绍的Angular中的$watch方法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# angular  # $watch  # AngularJS中$apply方法和$watch方法用法总结  # AngularJs $parse、$eval和$observe、$watch详解  # AngularJS中$watch和$timeout的使用示例  # AngularJS中的$watch()  # $digest()和$apply()区分  # 浅谈angular.js中实现双向绑定的方法$watch $digest $apply  # 第三个  # 小编  # 法会  # 就会  # 都要  # 在此  # 这就是  # 只会  # 第二个  # 给大家  # 可以使用  # 可选  # 会去  # 在前面  # 表单  # 不加  # 时才  # 所述  # 给我留言  # 感谢大家 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  打造顶配客厅影院,这份100寸电视推荐名单请查收  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  动图在线制作网站有哪些,滑动动图图集怎么做?  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel如何使用Sanctum进行API认证?(SPA实战)  如何在云主机上快速搭建多站点网站?  🚀拖拽式CMS建站能否实现高效与个性化并存?  轻松掌握MySQL函数中的last_insert_id()  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  js代码实现下拉菜单【推荐】  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  微信小程序 wx.uploadFile无法上传解决办法  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  使用spring连接及操作mongodb3.0实例  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  C#如何调用原生C++ COM对象详解  JS中对数组元素进行增删改移的方法总结  如何在局域网内绑定自建网站域名?  再谈Python中的字符串与字符编码(推荐)  canvas 画布在主流浏览器中的尺寸限制详细介绍  如何快速查询网址的建站时间与历史轨迹?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧  Laravel如何实现API资源集合?(Resource Collection教程)  如何确认建站备案号应放置的具体位置?  如何在Windows 2008云服务器安全搭建网站?  简历在线制作网站免费版,如何创建个人简历?  企业网站制作这些问题要关注  在Oracle关闭情况下如何修改spfile的参数  使用Dockerfile构建java web环境  微信小程序 HTTPS报错整理常见问题及解决方案  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  公司门户网站制作流程,华为官网怎么做?  怎么用AI帮你为初创公司进行市场定位分析?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Laravel如何使用Vite进行前端资源打包?(配置示例)  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  JS经典正则表达式笔试题汇总  HTML 中动态设置元素 name 属性的正确语法详解  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  原生JS获取元素集合的子元素宽度实例  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel如何实现一对一模型关联?(Eloquent示例)  如何在万网自助建站中设置域名及备案?  如何在IIS7上新建站点并设置安全权限?  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)