2

我正在开发基于 AngularJS 的网页,有时我需要更改路径(如果您愿意,可以使用 shebang)。问题是有时$location.path("/my_path_here")有效,但有时我需要在调用$scope.$apply()后调用$location.path以使网络浏览器切换到新路径。

为什么会这样?

编辑:

示例http://pastebin.com/d1SjfCHd

4

1 回答 1

6

看看这个问题和 Misko 的回答:数据绑定如何在 AngularJS 中工作?

该答案在技术上非常详细地解释了该过程。所以,我会用外行的话来说。

AngularJS 通过脏检查使自己工作,Angular 正在监视一组值。每次发生大事(单击,控制器中的函数调用)时,Angular 都会运行一个digest循环,比较观察到的值以​​查看是否有任何变化。如果有变化,取决于观察者,角度将采取必要的行动(更新视图、触发回调、更新路由)。

当您在控制器中使用默认指令并且没有 jquery 事件处理时,您会没事的。但是,如果您这样做,您需要知道您不在 Angular 的消化周期中。这意味着观察者在 a 发生之前不会触发digest

您需要知道何时更新正在监视的变量。大多数情况下,它是自定义 DOM 事件(或 jquery 事件)。在这种情况下,您需要让 Angular 知道某些事情发生了变化,并且需要重新检查发生了什么(即更新观察者)。

这是在你改变了一些东西scope.$apply() 之后做的。

请记住,$apply()如果您已经处于 Angular 的摘要循环中,则无法运行。它会抛出一个错误,如$digest already in progress.

于 2013-09-04T10:26:18.987 回答