【发布时间】:2016-08-24 20:44:47
【问题描述】:
我已经构建了一个应用程序,它使用router 3.0.0-beta.1 在应用程序部分之间切换。我还使用location.go() 来模拟同一页面的子部分之间的切换。我使用了<base href="/"> 和一些 URL 重写规则,以便在页面刷新的情况下将所有路由重定向到 index.html。这允许路由器接收请求的小节作为 URL 参数。基本上我已经设法避免使用HashLocationStrategy。
routes.ts
export const routes: RouterConfig = [
{
path: '',
redirectTo: '/catalog',
pathMatch: 'full'
},
{
path: 'catalog',
component: CatalogComponent
},
{
path: 'catalog/:topCategory',
component: CatalogComponent
},
{
path: 'summary',
component: SummaryComponent
}
];
如果我点击导航栏中的一个小节,会发生 2 件事:
-
logation.go()使用必要的字符串更新 URL 以指示当前小节 - 自定义的
scrollTo()动画在请求的小节顶部滚动页面。
如果我刷新页面,我将使用先前定义的路线并提取必要的参数以恢复滚动到请求的小节。
this._activatedRoute.params
.map(params => params['topCategory'])
.subscribe(topCategory => {
if (typeof topCategory !== 'undefined' &&
topCategory !== null
) {
self.UiState.startArrowWasDismised = true;
self.UiState.selectedTopCategory = topCategory;
}
});
除了单击后退按钮外,一切正常。如果上一页是不同的部分,则应用路由器的行为与预期相同。但是,如果上一个页面/url 是一个小节,则 url 将更改为上一个,但 UI 中没有任何反应。如何检测是否按下了后退按钮以调用 scrollTo() 函数再次完成它的工作?
我看到的大多数答案都依赖于事件onhashchange,但这个事件并没有在我的应用程序中被触发,因为毕竟我的 URL 中没有哈希......
【问题讨论】:
标签: javascript angular angular-ui-router