有两种主要方法可用来实现您所追求的目标。
其中之一是您提到的哈希方法。如果您需要支持较旧的浏览器(IE <=
9),这就是方法。如果您决定使用此方法,那么您的朋友就是
hashchangeevent。哈希模式依靠此事件来触发功能。以最幼稚的方式,它看起来像:
window.addEventListener('hashchange', function (e) { var hash = window.location.hash; if (hash === 'event-1') { // ... } else if (...) { // ... }});您的另一种选择是使用History API(特别是-
pushState方法)和
popstateevent。应该注意的是,该
pushState方法不会创建HTTP请求。同样,如果用户更改当前历史记录条目(使用后退/前进按钮),浏览器将不会重新加载,而是触发一个
popstate您可以收听的事件。如果用户导航到不是使用
pushState或创建的历史记录条目,则
replaceState浏览器将按预期加载资源(不会损害用户的体验-
如果她想退出网站,则可以成功)。
请注意,使用该
hashchange方法可能会与使用该方法的其他库发生冲突,并且由于大多数流行的框架(琥珀色,有角度的等等)出于浏览器兼容性原因而使用该方法,因此存在一定的风险。
对于“不存在的页面”问题,您可能会想到的解决方案是针对您的状态而不是不存在的URL使用查询参数:
window.history.pushState({ event: 'event-id' }, "Event Title", "?event=event-id");然后,您可以在页面加载时解析查询参数,并使用它们的值以将组件初始化为所需的状态。
您可以看一下这篇不错的MDN文章,以获取更好的参考。



