我正在开发基于 AngularJS 的网页,有时我需要更改路径(如果您愿意,可以使用 shebang)。问题是有时$location.path("/my_path_here")
有效,但有时我需要在调用$scope.$apply()
后调用$location.path
以使网络浏览器切换到新路径。
为什么会这样?
编辑:
我正在开发基于 AngularJS 的网页,有时我需要更改路径(如果您愿意,可以使用 shebang)。问题是有时$location.path("/my_path_here")
有效,但有时我需要在调用$scope.$apply()
后调用$location.path
以使网络浏览器切换到新路径。
为什么会这样?
编辑:
看看这个问题和 Misko 的回答:数据绑定如何在 AngularJS 中工作?
该答案在技术上非常详细地解释了该过程。所以,我会用外行的话来说。
AngularJS 通过脏检查使自己工作,Angular 正在监视一组值。每次发生大事(单击,控制器中的函数调用)时,Angular 都会运行一个digest
循环,比较观察到的值以查看是否有任何变化。如果有变化,取决于观察者,角度将采取必要的行动(更新视图、触发回调、更新路由)。
当您在控制器中使用默认指令并且没有 jquery 事件处理时,您会没事的。但是,如果您这样做,您需要知道您不在 Angular 的消化周期中。这意味着观察者在 a 发生之前不会触发digest
。
您需要知道何时更新正在监视的变量。大多数情况下,它是自定义 DOM 事件(或 jquery 事件)。在这种情况下,您需要让 Angular 知道某些事情发生了变化,并且需要重新检查发生了什么(即更新观察者)。
这是在你改变了一些东西scope.$apply()
之后做的。
请记住,$apply()
如果您已经处于 Angular 的摘要循环中,则无法运行。它会抛出一个错误,如$digest already in progress.