在不触发状态更改的情况下更新 URL

Update URL without triggering state change

我的 angular 应用程序使用 UI 路由器。我正在通过滚动到不同的点来响应状态变化。 (它基本上只是一个大的视差滚动条)

所以我可以使用状态机单击将我带到正确位置的菜单链接,但是如果我想使用鼠标滚轮滚动,我希望它在我滚动时更新 url,但需要避免 url 更改触发不必要的状态更改。

如何在不触发状态更改事件等的情况下更新 url 以反映滚动位置?

Angulajs 在其 $location 对象上有一个 html5 模式,允许您使用 html5 历史记录 api url,这里是 angularjs docs就可以了。您将使用它来链接到某些滚动位置。

这里有一篇关于使用 angularjs 之外的 history api 无需刷新即可更改 url 的好文章。

有了这个,你可以用javascript(使用历史api)触发url基于滚动position/way点的变化。

if (scrollTop > 200) { changeUrl('some-url');} //Sudo code

编辑:根据评论,这不会阻止路由器尝试处理新更改的 url,因此可能不适合所有(实际上是这种)情况。

所以这最终成功了:

$state.go('STATE_NAME',null,{location:'replace',notify:false})