热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解析AngularJS中$scope.$apply()方法实现数据双向绑定与脏检查机制

$apply()方法允许从AngularJS框架外部触发表达式的执行,确保其在AngularJS的上下文中运行。例如,当你使用`setTimeout()`或者集成第三方库时,可以通过调用`$apply()`来确保事件更新能够被AngularJS检测到并触发脏检查机制,从而实现数据的双向绑定。这一过程不仅保证了数据的一致性,还提升了应用的响应速度和用户体验。

$apply()函数可以从Angular框架的外部让表达式在Angular上下文内部执行。例如,假设你实现了一个setTimeout()或者使用第三方库并且想让事件运行在Angular上下文内部时,就必须使用$apply()。

简而言之,使用$scope.$apply()时可以从外部进入上下文。如果在事件被触发时调用$apply(),就会使用Angular事件循环来运行它。如果没有调用$apply(),就不会在事件循环内执行这个函数,而它会运行在Angular上下文外部。

何时使用$apply?

通常可以依赖于Angular提供的可用于视图中的任意指令来调用$apply()。所有ng-[event]。

指令(比如ng-click、ng-keypress)都会调用$apply()。

此外还可以依赖于一系列Angular内置的服务来调用$digest()。比如$http服务会在XHR请求完成并触发更新返回值(promise)之后调用$apply()。

无论何时我们手动处理事件,使用第三方框架(比如jQuery、Facebook API),或者调用setTimeout(),都可以使用$apply()函数让Angular返回$digest循环。

当我们将jQuery和Angular集成在一起时(这通常被视为一个肮脏的行为),就需要使用$apply(),因为Angular不会察觉到执行在Angular上下文外部的事件。例如,在使用jQuery时(比如click事件),就需要使用$apply()将来自jQuery的事件传递到Angular应用中。

如何使用$apply?

在下面这段代码中,点击【按钮一】可以看到我们理想中的效果,这一点确定无疑;但是点击【按钮二】,如果没有$scope.$apply()这段代码,就执行不下去。

01
02"en">
03<head>
04    "UTF-8">
05    
06    
09head>
10"app" ng-controller&#61;"ctr" ng-cloak class&#61;"ng-clock">
11    {{name}}
12    
13    
14    id&#61;"btn">按钮二
15
16
17
18
19

以上就是$apply的作用。


推荐阅读
author-avatar
jason---zhu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有