如果你对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,因为他并不知道你的数据在什么时候是最新的
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
问题内容: 我不知道如何使用和。官方文档没有帮助。 我不明白的是: 他们连接到DOM吗? 如何更新对模型的DOM更改? 它们之间的连接点是什么? 我尝试了本教程,但这需要对它的理解并且理所当然。 做什么和做什么,以及如何正确使用它们? 问题答案: 您需要了解AngularJS的工作原理才能理解它。 消化周期和作用域 首先,AngularJS定义了所谓的 摘要循环 的概念。这个周期可以看作是一个循环
问题内容: 我只想知道火热的使用方法。在控制器内,以下代码可以正常工作,并且在3秒后更新DOM: 但是通过使用 没发生什么事… 我以为他们做同样的事情。我怎么了? 问题答案: 并有一些异同。它们的相似之处在于它们都检查了更改内容并更新了UI并触发了所有观察程序。 两者之间的区别是它们的调用方式。被调用而没有任何参数。具有在执行任何更新之前将要执行的功能。 另一个区别是它们的影响。将更新当前范围和任
本文向大家介绍AngularJS中$apply方法和$watch方法用法总结,包括了AngularJS中$apply方法和$watch方法用法总结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了AngularJS中$apply方法和$watch方法用法。分享给大家供大家参考,具体如下: 引言 最近在项目中封装控件的时候用到了$watch方法来监听module中的值的变化,当时小编对这个方法
问题内容: 如果我有一个指令可以响应示波器上特定属性的状态,并且我想在测试中更改该属性并验证其是否正确响应,那是进行此更改的最佳方法? 我已经看过这两种模式: 和 它们之间有什么区别,哪个更好,为什么? 问题答案: 会在当前范围及其所有子级上触发监视程序。将评估传递的函数并运行。 第一个更快,因为它需要评估观察者的当前范围及其子级。第二个比较慢,因为它需要评估观察者及其所有子作用域。 当其中一个观
我正在用一个指令计算html元素的最小高度,当我试图通过scope.$apply()更新父作用域值时,我得到以下错误: 我的指示是: 我总是可以使用更新父作用域值,但在这种情况下,指令的作用域规则将不起作用(例如,如果我想通过“@”隔离作用域,则ctrl仍将接收更新)。 此外,我可以通过设置min-height值,但我希望以角度的方式进行。 问题出在哪里? *使用angular 1.3.5处理任何
问题内容: 我发现自从以角度构建应用程序以来,我需要越来越多地手动将页面更新到我的范围。 我唯一知道的方法是从控制器和指令的范围进行调用。问题是它不断向显示以下内容的控制台抛出错误: 错误:$ digest已经在进行中 有谁知道如何避免这种错误或以不同的方式实现相同的目的? 问题答案: 不要使用此模式 -最终将导致更多错误,无法解决。即使您认为它可以修复某些问题,也没有。 您可以通过检查来检查a