angularjs 中$apply,$digest,$watch詳解
如果你對angular的$apply,$digest,$watch似懂非懂,那我相信下面幾句話能讓你深刻理解!
此文針對已經(jīng)了解過$apply,$digest,$watch的同學。也就是說你已經(jīng)在很多的博客論壇搜索過$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(‘a(chǎn)pp‘, [])
.controller(‘myController‘, function($scope, $timeout, $interval) {
// 第一種
// $scope.clock = {};
// var clockFunction = function() {
// $scope.clock.now = new Date();
// $timeout(function() { // 使用$timeout 來代替setTimeout(),因為前者已經(jīng)調(diào)用了$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 則需要手動調(diào)用$apply(),以使已經(jīng)改變的$scope及時的更新到view
$scope.$apply(updateClock);
// 這里可以看出 $scope已經(jīng)改變但并未及時更新到view
// updateClock();
// console.log($scope.clock.now);
}, 1000);
updateClock();
})
</script>
</body>
</html>
準備開始!
$apply (通知)
$digest(循環(huán))
$watch(監(jiān)聽)
這里可能與英語的翻譯有所差別,但是這不是重點,重點是讓你能夠理解
angular在監(jiān)聽數(shù)據(jù)變化并執(zhí)行雙向綁定時一定會做的事情:
通知($apply)angular,告訴他有一個函數(shù)test($apply(test)),需要他幫忙做下臟檢查($digest臟檢查),在做臟檢查的同時監(jiān)聽數(shù)據(jù)變化($watch)并反映到view中
當不在angular上下文中的時候,則需要你手動$apply。如果不做$apply雖然angular能夠監(jiān)聽數(shù)據(jù)變化,但他并不會將數(shù)據(jù)及時更新到view,因為他并不知道你的數(shù)據(jù)在什么時候是最新的
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- angularJS中$apply()方法詳解
- 淺談angular.js中實現(xiàn)雙向綁定的方法$watch $digest $apply
- AngularJS中的$watch(),$digest()和$apply()區(qū)分
- 全面解析Angular中$Apply()及$Digest()的區(qū)別
- AngularJS中$apply方法和$watch方法用法總結(jié)
- AngularJS報錯$apply already in progress的解決方法分析
- Angular項目中$scope.$apply()方法的使用詳解
- Angular.js中$apply()和$digest()的深入理解
- AngularJS雙向數(shù)據(jù)綁定原理之$watch、$apply和$digest的應(yīng)用
- Angularjs中的$apply及優(yōu)化使用詳解
相關(guān)文章
AngularJs的UI組件ui-Bootstrap之Tooltip和Popover
這篇文章主要介紹了AngularJs的UI組件ui-Bootstrap之Tooltip和Popover,tooltip和popover是輕量的、可擴展的、用于提示的指令。具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
AngularJS入門心得之directive和controller通信過程
Angular JS (Angular.JS) 是一組用來開發(fā)Web頁面的框架、模板以及數(shù)據(jù)綁定和豐富UI組件,接下來通過本文給大家介紹AngularJS入門心得之directive和controller通信過程,對angularjs相關(guān)知識感興趣的朋友一起學習吧2016-01-01
AngularJS驗證信息框架的封裝插件用法【w5cValidator擴展插件】
這篇文章主要介紹了AngularJS驗證信息框架的封裝插件用法,分析了AngularJS表單驗證規(guī)則并實例說明了w5cValidator擴展插件的相關(guān)使用技巧,需要的朋友可以參考下2016-11-11
AngularJS基礎(chǔ) ng-model-options 指令簡單示例
本文主要介紹AngularJS ng-model-options 指令,這里對ng-model-options指令的基本資料進行整理,有需要的小伙伴可以參考下2016-08-08
AngularJS監(jiān)聽ng-repeat渲染完成的方法
這篇文章主要介紹了AngularJS監(jiān)聽ng-repeat渲染完成的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-03-03
Webpack 實現(xiàn) AngularJS 的延遲加載
這篇文章主要介紹了Webpack 實現(xiàn) AngularJS 的延遲加載的相關(guān)資料,需要的朋友可以參考下2016-03-03

