2016-12-02 75 views
1

如果我浏览编程方式使用路由器的navigate方法角2差

this.router.navigate(['/articles', {id: 1}]);结果的网址为/articles;page=1

this.router.navigate(['/articles', id]);结果的网址为/articles/1

在这两个第二种方式变体我可以通过this.activatedRoute.params.forEach((params: Params) => {});

那么除了款式有什么不同?

P.S.发现与查询之间的差异question PARAMS &矩阵PARAMS

回答

3

['/articles', {id: 1}]{id: 1}是一个可选的路由参数以及添加作为基质的参数子路由和查询参数到根路由

['/articles', id]是一种正常的和需要的路线参数代替路线路径中的:id

+0

Thx for clearfication,但设置可选参数(如页码:/ articles?page = 1或/ articles; page = 1)的最佳选择是什么? – neilhem

+0

这取决于你想完成什么。 ':id'用于路由匹配。查询和矩阵参数只是传递值而不考虑路由匹配。这也取决于你是否希望'/ articles'成为一个有效的路由或只有'/ articles/someid'。 –

+0

其实'/ article; page = 1'是无效的。有一个变化来使这个错误。如上所述,根路由上的可选路由参数被序列化为查询参数,因此只有前者是有效的。 '/ parent/child; someparam = somevalue?page = 1'会有效,因为someparam是子路由上的一个参数。我不知道当你有一个空路径根路由和'article'是子路由时的行为。在这种情况下你的第二个例子可能是有效的。必须测试才能知道最终的行为会是什么。 –