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 相关文章推荐
图片在浏览器中底部对齐 解决方法之一
Nov 30 Javascript
jquery代码实现简单的随机图片瀑布流效果
Apr 20 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
Dec 13 Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 Javascript
用js实现before和after伪类的样式修改的示例代码
Sep 07 Javascript
20170918 前端开发周报之JS前端开发必看
Sep 18 Javascript
vue2单元测试环境搭建
May 24 Javascript
在vue项目中引用Iview的方法
Sep 14 Javascript
Vue中插入HTML代码的方法
Sep 21 Javascript
微信小程序 自定义复选框实现代码实例
Sep 04 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
Dec 06 Javascript
JavaScript仿京东秒杀倒计时
Mar 17 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设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
PHP.vs.JAVA
2016/04/29 PHP
JS 类型转换常见方法小结
2010/05/31 Javascript
如何使用Javascript正则表达式来格式化XML内容
2013/07/04 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
对angular 实时更新模板视图的方法$apply详解
2018/10/09 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
vue登录注册实例详解
2019/09/14 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
python正则分析nginx的访问日志
2017/01/17 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
Python符号计算之实现函数极限的方法
2019/07/15 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
pytorch梯度剪裁方式
2020/02/04 Python
python scatter函数用法实例详解
2020/02/11 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
激励口号大全
2014/06/17 职场文书
酒店周年庆活动方案
2014/08/21 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书