$apply用法注意
Angular为我们提供了一些接口绑定JavaScript代码和数据,而绑定数据改变和更新angular则是使用$apply方法实现的。
$apply
进行数据变化检查的实际上是$digest
函数,但是我们往往不是直接使用$digest
,而是使用$apply
,$apply
接收表达式或者函数作为参数后调用$digest来更新绑定部门以及监控器。实际上,Angular几乎在所有提供的代码中添加了$apply
,如ng-click
,初始controller,$http
的回调操作,在这,你并不需要亲自调用 $apply
,而且重复的调用会引起错误。
因此,当你运行了一个新阶段,并且这部分并不属于Angular库的情况下才需要使用$apply
。这有一段关于setTimeout
的代码,在经过了2000毫秒的延迟之后,代码进入执行了一个新的阶段,但是Angular并不知道数据有更新,因此更新并不会被显示。
function Ctrl($scope) {
$scope.message = "Waiting 2000ms for update"; setTimeout(function () {
$scope.message = "Timeout called!";
// AngularJS unaware of update to $scope
}, 2000);
}
在上面的代码中就需要调用$apply方法,手动调用,另外Angular提供了$timeout
来代替setTimeout
,相当于在其中默认调用$apply。一般直接使用Angular里面的方法则不用调用$apply方法。
另外,除$http
之外的Ajax调用,除了ng-*
之外的监听器,或者除了$timeout
之外的计时器,都应该使用$scope.$apply
来同步显示绑定。如下例子,则是Ajax的例子。
$.ajax({
type: 'GET',
url: '/rest/caseinfo/getcaseinfobybh/' + bh,
contentType: "application/json",
success: function (data, textStatus) {
$scope.caseinfo = data;
$scope.$apply();
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
alert("获取异常 " + errorThrown);
}
});
这里使用JQuery里面的方法,调用$scope域内的参数,则需要手动调用$apply方法。
随机推荐
- Linux 下面adb命令的使用
平板或者android手机使用adb是非常方便的.接下来我就介绍下adb使用以及一些常用的命令. 1,连接 用adb连接线,一端接PC的USB中,一端接平板或手机的adb口,当然得确保线没有问题,而且 ...
- Python学习笔记 - day2 - PyCharm的基本使用
什么是IDE 开始学习的小白同学,一看到这三个字母应该是懵逼的,那么我们一点一点来说. 既然学习Python语言我们就需要写代码,那么代码写在哪里呢? 在记事本里写 在word文档里写 在sublim ...
- 分享三个USB抓包软件---Bus Hound,USBlyzer 和-USBTrace【转】
转自:http://bbs.armfly.com/read.php?tid=15377 Bus Hound官方下载地址:http://perisoft.net/bushound/ Bus Hound ...
- Github上的几个C++开源项目
Github上的几个C++开源项目 http://blog.csdn.net/fyifei0558/article/details/47001677 http://www.zhihu.com/ques ...
- DECODE 与CASE WHEN 的比较以及用法
1.DECODE 只有Oracle 才有,其它数据库不支持; 2.CASE WHEN的用法, Oracle.SQL Server. MySQL 都支持; 3.DECODE 只能用做相等判断,但是可以配 ...
- Oracle rman 脚本
1.shell脚本1)vi rman_backup.cmd#rman_backup.cmdconnect target /run{ allocate channel d1 device type d ...
- 细说robots.txt
robots.txt Robots协议(也称为爬虫协议.机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可 ...
- docker从零开始(一)centos获取安装docker-ce
卸载旧版本 较旧版本的Docker被称为docker或docker-engine.如果已安装这些,请卸载它们以及相关的依赖项. centos7 yum安装的docker就是docker-engine ...
- pytest学习(2)
可以把多个test放在一个class里, class TestClass(object): def test_one(self): x = "this" assert 'h' in ...
- ORM-老师信息系统
老师信息管理 思考 三种方式创建多对多外键方式及其优缺点. 通过外键创建 (自定义第三张表,通过外键与其他两张表关联 但是不能用Django ORM 多对多操作的语法) class Class(mo ...