zoukankan      html  css  js  c++  java
  • $watch $apply and $evalAsync vs $timeout

    $watch

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

    $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)

    $apply

    http://blog.csdn.net/dm_vincent/article/details/38705099
    如果你在AngularJS上下文之外的任何地方修改了model,那么你就需要通过手动调用$apply()来通知AngularJS。这就像告诉AngularJS,你修改了一些models,希望AngularJS帮你触发watchers来做出正确的响应。

  • 相关阅读:
    Linux学习1-Xshell连接阿里云ECS服务器
    关于面试总结11-selenium面试题
    Word中如何公式居中标号右对齐
    Visio中如何画面积一样的形状
    Visio整体移动
    Visio中汇总两个箭头
    Matlab中ismember用法
    Visio中插入公式
    Visio中如何让重叠图形都显示
    如何命令行编译Java工程
  • 原文地址:https://www.cnblogs.com/wancy86/p/5999004.html
Copyright © 2011-2022 走看看