我正在开发一个转换为Angular的网站 - 它使用Angular进行单页面应用程序导航,而我目前正在处理的新功能完全是用Angular编写的。
网站的其余部分获取导航结果并通过SPA模型返回它们,我正在处理的功能完全在单个页面中运行,但为了使链接可共享和可收藏,它会更改与页面的当前状态。
因此,当有人选择新功能的新子部分时,我们在子部分服务中有一些这样的代码:
function setLocationForSubsection(subsection) {
var path = subsection.id ? "subsections/" + subsection.id + "/" + subsection.urlSlug : "";
$location.path("/section/" + path).search({}).skipReload();
};
如果他们按照指向网站其他位置的链接(通过$stateProvider.state('all', { url: '*urlPath?id', controller...
模式),则可以正常使用。
如果他们点击后退按钮,他们会回到正确的页面并调用setLocationForSubsection
。如果他们再次点击子部分外的同一链接,则没有任何反应。
所以这个行动过程发生了:
/section/2/subsection-name
< - works。/news
< - works /section/2/subsection-name
)< - 作品/news
失败 据我所知,问题出现是因为在这种情况下位置路径设置无法将位置推入角度状态,因此就角度而言,它仍然在/news
上,所以当我尝试在那里导航,它不会把它当作导航事件。我曾尝试手动使用$window.history.pushState(null, 'any', $location.absUrl());
,但似乎没有任何区别。如果我放弃skipReload
调用它可以工作但重新加载页面的内容,这在这种情况下是多余的。我现在正在使用这种方法,但我想知道是否有更好的选择。
有没有办法告诉角度在这种情况下发生了状态变化?