AngularJS和location.path()

时间:2013-09-04 10:06:22

标签: javascript html angularjs

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

为什么会这样?

编辑:

示例http://pastebin.com/d1SjfCHd

1 个答案:

答案 0 :(得分:6)

看看这个问题和Misko的回答:How does data binding work in AngularJS?

该答案以技术细节详细说明了这一过程。所以,我会以外行的方式说出来。

AngularJS通过使用脏检查使自己工作,有角度正在观察的值集。每当发生重大事件时(点击,控制器中的函数调用),angular会运行digest个周期,比较观察值以查看是否有任何变化。如果有更改,则取决于观察者,angular将采取必要的操作(更新视图,触发回调,更新路径)。

当你在控制器中使用默认指令而没有jquery事件处理时,你会没事的。 但是,如果这样做,您需要知道您不在角度的摘要周期中。这意味着观察者在发生digest之前不会开火。

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

这是在{/ 1>} 之后你做了一些改变。

请记住,如果您已经处于角度的摘要周期中,则无法运行scope.$apply()。它会抛出类似$apply()

的错误