angularjs 中$apply,$digest,$watch详解


Posted in Javascript onOctober 13, 2016

如果你对angular的$apply,$digest,$watch似懂非懂,那我相信下面几句话能让你深刻理解!

此文针对已经了解过$apply,$digest,$watch的同学。也就是说你已经在很多的博客论坛搜索过$apply,$digest,$watch,虽然有点蒙,但似懂非懂的感觉。

如果你从未进行过了解,那本文对你将没有一点帮助!

<!DOCTYPE html>
<html lang="zh-CN" ng-app="app">
<head>
  <meta charset="utf-8">
  <title>angular时钟辅助理解$apply,$digest,$watch</title>
  <link rel="stylesheet" href="../bootstrap.min.css">
</head>
<body ng-controller="myController">

  <div ng-bind="clock.now"></div>


  <script src="../angular.min.js"></script>
  <script>
    angular.module(‘app‘, [])
    .controller(‘myController‘, function($scope, $timeout, $interval) {

      // 第一种
      // $scope.clock = {};
      // var clockFunction = function() {
      //   $scope.clock.now = new Date();
      //   $timeout(function() { // 使用$timeout 来代替setTimeout(),因为前者已经调用了$apply()
      //     clockFunction();
      //   }, 1000)
      //   // setTimeout(function() {
      //   //   $scope.$apply(clockFunction);
      //   // }, 1000)
      // }
      // clockFunction();

      // 第二种
      $scope.clock = {
         now: new Date()
      };   
      var updateClock = function() {
        $scope.clock.now = new Date();
      };   
      setInterval(function() { // 如果不使用$interval 则需要手动调用$apply(),以使已经改变的$scope及时的更新到view
        $scope.$apply(updateClock);

        // 这里可以看出 $scope已经改变但并未及时更新到view
        // updateClock();
        // console.log($scope.clock.now);
      }, 1000);   
      updateClock();
    })
  </script>
</body>
</html>

准备开始!

$apply (通知)
$digest(循环)
$watch(监听)

这里可能与英语的翻译有所差别,但是这不是重点,重点是让你能够理解

angular在监听数据变化并执行双向绑定时一定会做的事情:

通知($apply)angular,告诉他有一个函数test($apply(test)),需要他帮忙做下脏检查($digest脏检查),在做脏检查的同时监听数据变化($watch)并反映到view中

当不在angular上下文中的时候,则需要你手动$apply。如果不做$apply虽然angular能够监听数据变化,但他并不会将数据及时更新到view,因为他并不知道你的数据在什么时候是最新的

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
node.js中的fs.fchownSync方法使用说明
Dec 16 Javascript
jquery对象和DOM对象的任意相互转换
Feb 21 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
May 28 Javascript
javascript实现根据汉字获取简拼
Sep 25 Javascript
js 判断登录界面的账号密码是否为空
Feb 08 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
Oct 10 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
layui表格 返回的数据状态异常的解决方法
Sep 10 Javascript
微信小程序上传图片并等比列压缩到指定大小的实例代码
Oct 24 Javascript
详解JavaScript修改注册表的方法
Jan 05 Javascript
js对象属性名驼峰式转下划线的实例代码
Sep 17 Javascript
JavaScript实现显示和隐藏图片
Apr 29 Javascript
jQuery鼠标事件总结
Oct 13 #Javascript
BootStrap实现邮件列表的分页和模态框添加邮件的功能
Oct 13 #Javascript
jQuery中delegate()方法的用法详解
Oct 13 #Javascript
炫酷的js手风琴效果
Oct 13 #Javascript
轻松搞定js表单验证
Oct 13 #Javascript
Seajs是什么及sea.js 由来,特点以及优势
Oct 13 #Javascript
使用jquery给指定的table动态添加一行、删除一行
Oct 13 #Javascript
You might like
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
jQuery插件MixItUp实现动画过滤和排序
2015/04/12 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
js漂浮广告实现代码
2015/08/15 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
javascript如何实现create方法
2019/11/04 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Python Pillow Image Invert
2019/01/22 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
Python requests上传文件实现步骤
2020/09/15 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
利用HTML5中Geolocation获取地理位置调用Google Map API在Google Map上定位
2013/01/23 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
银行自荐信范文
2013/10/07 职场文书
工会主席事迹材料
2014/06/03 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书