如何告诉AngularJS“刷新”

16 浏览
0 Comments

如何告诉AngularJS“刷新”

我有一个点击事件发生在我自定义指令的范围之外,所以我没有使用\"ng-click\"属性,而是使用jQuery.click()监听器,并在我的作用域内调用一个函数,代码如下:\n

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

\nclose()是一个简单的函数,代码如下:\n

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

\n在我的视图中,我有一个元素与isOpen绑定的\"ng-show\",代码如下:\n

My Div

\n在调试过程中,我发现close()被调用了,isOpen被更新为false,但是AngularJS的视图没有更新。有没有办法告诉Angular手动更新视图?或者有没有更“Angular”的方法来解决这个问题,我没有看到?

0
0 Comments

如何告诉AngularJS“刷新”?

在使用AngularJS时,有时我们需要手动刷新页面或重新加载作用域。这种需求一般出现在以下情况中:我们进行截图测试时,需要模拟状态,但有时没有对状态变化的监听器,这可能导致失败或不稳定的测试结果。但是,我们可以使用下面的方法来刷新页面或重新加载作用域:

1. 对于使用$routeProvider的路由器,可以使用$route.reload()来刷新页面。需要确保在控制器中注入$route。

2. 对于使用ui-router的路由器,可以使用$state.reload()来刷新页面。

这些方法非常有用,可以帮助我们解决截图测试中的一些问题。

0
0 Comments

AngularJS中的$apply应该在什么时候调用?

$apply应该在希望应用在Angular外部进行的更改时调用。

$apply()用于在AngularJS框架之外执行表达式(例如来自浏览器DOM事件、setTimeout、XHR或第三方库)。因为我们在调用AngularJS框架,所以我们需要执行正确的作用域生命周期,包括异常处理和执行监视。

Angular允许使用任何值作为绑定目标。然后在任何JavaScript代码块结束时,它会检查值是否发生了变化。检查绑定值是否发生变化的步骤实际上有一个方法,$scope.$digest()。我们几乎从不直接调用它,而是使用$scope.$apply()(它会调用$scope.$digest)。

Angular只监视在表达式中使用的变量和作用域内的$watch中的任何内容。所以,如果你在Angular上下文之外改变了模型,你需要调用$scope.$apply()来传播这些更改,否则Angular将不知道它们已经被更改,因此绑定也不会更新。

0
0 Comments

问题:如何告诉AngularJS“刷新”?

出现原因:在jQuery事件回调中,需要刷新AngularJS的作用域。

解决方法:在jQuery事件回调中调用$scope.$apply();方法。

参考链接:jimhoskins.com/2012/12/17/angularjs-and-apply.html

注意事项:在指令中,经常看到使用scope而不是$scope的情况。这可能是为了区分在控制器中注入的'$scope'。在控制器中,引用$scope很重要,这样AngularJS才知道要注入哪个依赖项,而在指令的链接函数中,它总是通过顺序传递相同的4个元素,并不需要指定特定的名称(scope、element、attrs、controller)。

0