我如何告诉AngularJS“刷新”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我有一个在自定义指令范围之外发生的Click事件,所以我使用jQuery.click()侦听器,而不是使用“ng-click”属性,并在我的作用域中调用一个函数,如下所示:

$('html').click(function(e) {
  scope.close();
);

Close()是一个简单的函数,如下所示:

scope.close = function() {
  scope.isOpen = false;
}

在我看来,我有一个元素,它的“ng-Show”绑定为“Open”,如下所示:

<div ng-show="isOpen">My Div</div>

调试时,我发现Close()正在被调用,isOpen被更新为false,但是AngularJS视图没有更新。有什么方法可以手动分辨角来更新视图吗?还是有一种更“角度”的方法来解决这个问题,我没有看到?

提问于
用户回答回答于
用户回答回答于

$apply()用于从AngularJS框架外部执行AngularJS中的表达式。(例如,来自浏览器DOM事件、setTimeout、XHR或第三方库)。因为我们正在调用AngularJS框架,所以我们需要执行适当的作用域生命周期。

角允许将任何值用作绑定目标。然后,在任何JavaScript代码转到末尾时,它会检查值是否发生了变化。检查绑定值是否已经更改的步骤实际上有一个方法,$scope.$digest()。我们几乎从不直接调用它,因为我们使用$scope.$apply()相反。

角只监视表达式中使用的变量和$watch住在范围内。因此,如果要在角上下文之外更改模型,则需要调用$scope.$apply()如果要传播这些变化,则角将不知道它们已被更改,因此绑定将不会被更新。

扫码关注云+社区