【问题标题】:Angular JS views not updating properlyAngular JS 视图没有正确更新
【发布时间】:2012-12-17 14:20:09
【问题描述】:

我有以下操作

ng-click 在我的视图中 -> 这又调用了一个显示 jQuery Qtip ->jQuery ajax 函数strong> 在 Qtip 弹出窗口中,我在一个元素上有一个 ng-click -> 执行 $http post 并有一些 回调来更新 $scope 值。

所以所有这些事情都在正常进行。但是根据最后阶段回调中所做的更改,更新不会反映在视图中。

在我看来,我有一个“ng-mousemove”功能。因此,每当我移动鼠标时,视图中的更新都会反映出来。

我在这里做错了什么?是因为有角度和无角度之间的过渡吗?谁能帮我解决这个问题?

【问题讨论】:

    标签: angularjs javascript-framework


    【解决方案1】:

    正如docs 解释的那样:

    $apply() 用于从外部以角度执行表达式 角度框架。 (例如来自浏览器 DOM 事件, setTimeout、XHR 或第三方库)。因为我们正在呼唤 我们需要执行适当的范围生命周期的角度框架 异常处理,执行手表。

    所以如果你有一个 jQuery 代码 喜欢

    $('#myDiv').on('click', function() {
      // do stuff
      $scope.$apply();
    });
    

    【讨论】:

    • 在我的代码中,我只有 ng-click 调用 angular 函数。我在该角度函数中执行 jQuery.qtip() 。那个 jQuery.qtip 也做了一个 jQuery post internal 来获取 Qtip 的内容。但是当我在调用 qtip() 函数后尝试应用时,摘要已经在运行。 $apply 的正确位置是什么? qtip 渲染后不应该调用吗?
    • 一个 Angular 书呆子告诉我使用 if(!$scope.$$phase) $scope.$apply();
    • 另外,拨打$scope.$apply最安全的方式是:if ($scope.$root.$$phase != '$apply' && $scope.$root.$$phase != '$digest') { $scope.$apply(); }
    【解决方案2】:

    你必须告诉 angular Js $scope.$apply() 发生了一些变化。

    这是一个很好的博客,说明原因:http://www.yearofmoo.com/2012/10/more-angularjs-magic-to-supercharge-your-webapp.html#apply-digest-and-phase

    【讨论】:

      猜你喜欢
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      • 1970-01-01
      • 2014-07-22
      相关资源
      最近更新 更多