2016-12-02 64 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'是子路由時的行爲。在這種情況下你的第二個例子可能是有效的。必須測試才能知道最終的行爲會是什麼。 –