我正在开发一个基于AngularJS的网页,有时我需要改变路径(如果您愿意,可以选择shebang)。问题是有时$location.path("/my_path_here")
有效,但有时我需要在调用$scope.$apply()
后调用$location.path
以使网络浏览器切换到新路径。
为什么会这样?
编辑:
答案 0 :(得分:6)
看看这个问题和Misko的回答:How does data binding work in AngularJS?
该答案以技术细节详细说明了这一过程。所以,我会以外行的方式说出来。
AngularJS通过使用脏检查使自己工作,有角度正在观察的值集。每当发生重大事件时(点击,控制器中的函数调用),angular会运行digest
个周期,比较观察值以查看是否有任何变化。如果有更改,则取决于观察者,angular将采取必要的操作(更新视图,触发回调,更新路径)。
当你在控制器中使用默认指令而没有jquery事件处理时,你会没事的。
但是,如果这样做,您需要知道您不在角度的摘要周期中。这意味着观察者在发生digest
之前不会开火。
您需要知道何时更新正在观看的变量。主要是自定义DOM事件(或jquery事件)。在这种情况下,您需要让角度知道某些事情发生了变化,并且需要重新检查发生了什么(即更新观察者)。
这是在{/ 1>} 之后你做了一些改变。。
请记住,如果您已经处于角度的摘要周期中,则无法运行scope.$apply()
。它会抛出类似$apply()