$watch $apply and $evalAsync vs $timeout

$watch

$scope对象上的$watch方法会给Angular事件循环内的每一个$digest调用装配一个脏值检查。若是在表达式上检测到变化, Angular老是会返回$digest循环。angularjs

$watch函数自己接受两个必要参数和一个可选的参数:

  1.  watchExpression
    watchExpression能够是一个做用域对象的属性,或者是一个函数。在$digest循环中的每一个$digest调用都会涉及它。若是watchExpression是一个字符串, Angular会在$scope上下文中对它求值。若是它是一个函数,那么Angular会认为它会返回应该被监控的值。
  2.  listener/callback
    做为回调的监听器函数,它只会在watchExpression的当前值与先前值不相等(除了首次运行初始化期间)时调用。
  3.  objectEquality(可选)
    objectEquality是一个进行比较的布尔值,用来告诉Angular是否检查严格相等。$watch函数会给监听器返回一个注销函数,咱们能够调用这个注销函数来取消Angular对当前值的监控。

$evalAsync vs $timeout

http://stackoverflow.com/questions/17301572/angularjs-evalasync-vs-timeout
To summarize:
if code is queued using $evalAsync from a directive, it should run after the DOM has been manipulated by Angular, but before the browser renders
if code is queued using $evalAsync from a controller, it should run before the DOM has been manipulated by Angular (and before the browser renders) -- rarely do you want this
if code is queued using $timeout, it should run after the DOM has been manipulated by Angular, and after the browser renders (which may cause flicker in some cases)app

$apply

http://blog.csdn.net/dm_vincent/article/details/38705099
若是你在AngularJS上下文以外的任何地方修改了model,那么你就须要经过手动调用$apply()来通知AngularJS。这就像告诉AngularJS,你修改了一些models,但愿AngularJS帮你触发watchers来作出正确的响应。async

相关文章
相关标签/搜索