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方法。

随机推荐

  1. 扑克牌(cards)

    扑克牌 思路 这题也是二分!! 我们二分有几套牌,然后再去检验是否符合,至于怎么想到的,不要问我,我也不知道 那么我们主要解决的就是check函数 我们将二分的套数和每种牌的数量进行比较,如果该种牌的 ...

  2. Linux中实现一个简单的进度条【转】

    转自:http://blog.csdn.net/yuehailin/article/details/53999288 说起进度条,其实大家常常见到,比如说你在下载视频或文件的时候,提示你当前下载进度的 ...

  3. 使用python获取整月每一天的系统监控数据生成报表

    1.安装阿里开源监控工具tsar tsar官方网站 wget -O tsar.zip https://github.com/alibaba/tsar/archive/master.zip --no-c ...

  4. javascript实现网页返回顶部功能

    在浏览网页时,我们一般是拖动滚动条向下滑动,浏览下面的内容,当页面超过单页时,右下角会出现一个回到顶部的图标,有些网站这个图标一直显示在右下角的. 有些网站使用锚链接来实现页面内容的跳转,但这种效果的 ...

  5. 只有5行代码的算法——Floyd算法

    Floyd算法用于求一个带权有向图(Wighted Directed Graph)的任意两点距离的算法,运用了动态规划的思想,算法的时间复杂度为O(n^3).具体方法是:设点i到点j的距离为d[i][ ...

  6. laravel自定义公共函数

    1.在app/Helpers/下新建一个文件functions.php,当然这个文件位置和名称你可以自己定义,创建一些函数用于全局调用: 2.在composer.json中的autoload下增加如下 ...

  7. python socket 连续send,出现粘包问题

    使用网上socket代码实现ssh功能,如下: server.py #服务端Linux系统下:处理命令并返回import socketimport os#声明类型,生成socket链接对象server ...

  8. ubantu对pycharm创建快捷方式

    如果你刚开始没有建立快捷方式自己建立一个快捷方式,方法如下 终端输入:sudo gedit /usr/share/applications/Pycharm.desktop粘贴模板: [Desktop ...

  9. ant脚本调用.bat文件

    build.xml内容如下: <project name="example" default="test"> <target name=&qu ...

  10. Java 线程 锁

    http://www.blogjava.net/tscfengkui/archive/2010/11/10/337709.html?opt=admin http://hi.baidu.com/xhxz ...