如何告诉AngularJS“刷新”

2020/10/24 08:01 · javascript ·  · 0评论

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

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

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

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

在我看来,我有一个绑定到isOpen的“ ng-show”元素,如下所示:

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

调试时,我发现正在调用close(),isOpen被更新为false,但是AngularJS视图没有更新。有没有办法手动告诉Angular更新视图?还是有一种我没有看到的解决此问题的“角度”方法?

解决的办法是打电话给...

$scope.$apply();

...在我的jQuery事件回调中。

为什么$apply要叫?

TL; DR$apply每当您要应用Angular世界之外进行的更改时,都应调用TL; DR


只是为了更新@达斯汀的回答,这里是一个说明什么 $适用究竟做和为什么它的工作原理。

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

Angular允许将任何值用作绑定目标。然后,在任何JavaScript代码结尾处,它都会检查该值是否已更改。该步骤检查是否绑定值实际上已更改,该步骤具有方法$scope.$digest()1我们几乎从来不直接调用它,而是使用$scope.$apply()(将调用$scope.$digest)。

Angular仅监视在表达式中使用的变量以及$watch作用域内部的任何内容因此,如果要在Angular上下文之外更改模型,则需要调用$scope.$apply()这些更改才能传播,否则Angular将不知道它们已更改,因此绑定将不会更新2

$route.reload();

记住要注入$route您的控制器。

本文地址:http://javascript.askforanswer.com/ruhegaosuangularjsshuaxin.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!