Angular 4:收回并转发浏览器按钮点击并更新页面

时间:2018-04-11 11:57:03

标签: angular angular4-router

我是角度4的新手,如果用户点击后退或转发浏览器按钮,则会遇到不刷新页面的问题。 url中的查询参数根据历史记录更改,但页面不会使用以前的结果刷新。例如/ search?text =“ret”和后退按钮变为/ search?text = ben& tab = doc。

需要在浏览器按钮点击时刷新“搜索”路线。尝试使用Location popstate事件捕获点击但无法刷新页面。

设置window.location.href有效,但会重新加载页面。 ngrx路由器商店可以成为解决方案吗?

https://github.com/ngrx/platform/blob/v4.1.1/docs/router-store/api.md

2 个答案:

答案 0 :(得分:1)

据我了解,您不需要实际刷新页面。这就是单页应用程序的全部内容。相反,尝试在location.onPopState处理程序中主动更改页面。你可以在那里做router.navigate或解析弹出的查询参数,获取并重新填充搜索结果。您已经知道了新的位置,因此请使用此过程中的知识。

答案 1 :(得分:0)

当路径的路径保持不变,但查询参数或路径参数是动态的(更改)时,当前组件将不会被销毁并重新初始化。这是除非你标记路由器这样做(Router.onSameUrlNavigation('reload') - 见https://angular.io/api/router/Router)。

对于您的情况,您应该订阅路由的查询参数,并在每次发出新参数时做出反应。

例如

if searchController.isActive && searchController.searchBar.text != "" {
    // use the filtered data
} else {
    // use the normal data
}

当您知道不需要处理动态路由/查询参数时,只使用route.snapshot作为快捷方式。