在Angular2中不能可靠地触发路径参数订阅

问题描述:

我正在开发一个基于Angular2的测验,其中包含一些“静态”组件(家庭,常见问题等)和一个代表测验卡的组件。 我的设置使用的路线只有这样的占位符:在Angular2中不能可靠地触发路径参数订阅

{ 
    path: 'quiz/:questionPage', 
    component: QuizComponent 
}, 

这里questionPage应该是数字...

并切换竞猜卡我改变位置,并显示新卡:

import { Location } from '@angular/common'; 
import { ActivatedRoute } from '@angular/router' 
... 
constructor (
     private route: ActivatedRoute, 
     private location: Location) {...} 
... 
showQuestion(next) { 
    this.location.go ('quiz/' + next); 
    this.showQuestion (next); 
} 

要实现浏览器在QuizComponent后退/前进(除了在竞猜卡的下一个/上)我想我可能只是刚刚订阅路由的参数在QuizComponent的构造:

this.route.params.subscribe(params => { 
    console.log ("found params: ", params); 
}); 

这一直工作就像一个魅力:点击下一个/上更新了卡与浏览器的前进/后退,我熬过卡的历史。所有的完美,但我想,但我发现,至少有一个使用的情况下不工作:

如果我回去(不管多久),然后单击新的东西后退按钮也只更新位置(地址栏中的网址),但上述订阅未被解雇(因此卡片不会更新)。如果我再次点击一次,它会再次正常工作,但我后退两步!?我可以再次前进访问历史上正确的条目,但这当然令人讨厌...

所以..我做错了什么?也许这也是一个超级愚蠢的方法来实现浏览器后退/前进?

+0

通常我会使用路由器来导航而不是位置,不确定它是否会在这种情况下有所作为。 –

其实,在阅读Location的文档后,我认为这确实是问题所在。这是一项与浏览器网址互动的服务,您应该使用Router在您的应用内导航。

由于文件还指出:

使用位置只有当你需要进行交互或创建路由之外标准化 网址。

因此,如果您浏览的东西,如:

this.router.navigate(['quiz', next]); 

它应该工作正常。

+0

完美!非常感谢,真的! :) – binfalse