Dus*_*tin 162 javascript angularjs
我有一个在我的自定义指令范围之外发生的click事件,所以我没有使用"ng-click"属性,而是使用jQuery.click()监听器并在我的范围内调用一个函数,如下所示:
$('html').click(function(e) {
scope.close();
);
Run Code Online (Sandbox Code Playgroud)
close()是一个简单的函数,如下所示:
scope.close = function() {
scope.isOpen = false;
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我有一个"ng-show"元素绑定到isOpen,如下所示:
<div ng-show="isOpen">My Div</div>
Run Code Online (Sandbox Code Playgroud)
调试时,我发现正在调用close(),isOpen正在更新为false,但AngularJS视图没有更新.有没有办法让我手动告诉Angular更新视图?或者是否有更多的"角度"方法来解决这个我没有看到的问题?
Dus*_*tin 302
解决方案是打电话给...
$scope.$apply();
Run Code Online (Sandbox Code Playgroud)
...在我的jQuery事件回调中.
Mis*_*lis 27
$apply
要打电话?TL; DR:
$apply
只要您想应用Angular世界之外的更改,就应该调用它.
只是为了更新@Dustin的答案,这里解释了 $ apply究竟做了什么以及它为何起作用.
$apply()
用于从AngularJS框架外部执行AngularJS中的表达式.(例如,来自浏览器DOM事件,setTimeout,XHR或第三方库).因为我们正在调用AngularJS框架,所以我们需要执行异常处理的适当范围生命周期 ,执行监视.
Angular允许将任何值用作绑定目标.然后在任何JavaScript代码转弯结束时,它会检查该值是否已更改.检查是否有任何绑定值发生变化的步骤实际上有一个方法,$scope.$digest()
1.我们几乎从不直接调用它,因为我们使用$scope.$apply()
(它会调用$scope.$digest
).
Angular仅监视表达式中使用的变量以及$watch
范围内生活中的任何内容.因此,如果要在Angular上下文之外更改模型,则需要调用$scope.$apply()
这些更改进行传播,否则Angular将不知道它们已被更改,因此绑定将不会更新2.
tes*_*t30 13
使用
$route.reload();
Run Code Online (Sandbox Code Playgroud)
记得注入$route
你的控制器.