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 相关文章推荐
jquery插件jbox使用iframe关闭问题
Feb 09 Javascript
js实现简单秒表走动的时钟特效
Mar 25 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 Javascript
JavaScript中Array的实用操作技巧分享
Sep 11 Javascript
vue引入swiper插件的使用实例
Jul 19 Javascript
vue页面使用阿里oss上传功能的实例(二)
Aug 09 Javascript
浅谈在koa2中实现页面渲染的全局数据
Oct 09 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
May 08 Javascript
微信小程序自定义底部弹出框
Nov 16 Javascript
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 jQuery
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
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
js字符串转成JSON
2013/11/07 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
基于jquery插件实现拖拽删除图片功能
2020/08/27 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
JQuery样式与属性设置方法分析
2019/12/07 jQuery
前端vue如何使用高德地图
2020/11/05 Javascript
python处理cookie详解
2014/02/07 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
详解python中的hashlib模块的使用
2019/04/22 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
Python3批量生成带logo的二维码方法
2019/06/24 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
百思买美国官网:Best Buy
2016/07/28 全球购物
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
汉语专业应届生求职信
2013/10/01 职场文书
终端业务员岗位职责
2013/11/27 职场文书
端午节粽子促销活动方案
2014/02/02 职场文书
工作时间调整通知
2015/04/24 职场文书
诚实守信主题班会
2015/08/13 职场文书