2016-12-02 5 views
1

Если я навигация программно с помощью navigate метода маршрутизатораУгловое 2 разница между стилем параметров маршрута

this.router.navigate(['/articles', {id: 1}]); Result URL является /articles;page=1

и второй путь

this.router.navigate(['/articles', id]); Result URL является /articles/1

В обоих вариант I могу получить значения через this.activatedRoute.params.forEach((params: Params) => {});

Так в чем же отличие, кроме стиля?

P.S. Найдено question связанно с различиями между запросом Params & матрицы PARAMS

ответ

3

{id: 1} в ['/articles', {id: 1}] является необязательными параметрами маршрута и добавлен в качестве параметров матрицы к ребенку маршрутам и параметров запроса к корневому маршруту

['/articles', id] является нормальным, и необходимым параметром маршрута который заменяет :id в пути маршрута.

+0

Thx для clearfication, но что является лучшим выбором для установки необязательного параметра, такого как номер страницы:/articles? Page = 1 или/articles; page = 1? – neilhem

+0

Это зависит от того, чего вы хотите достичь. ': id' используется для согласования маршрутов. Параметры запроса и матрицы просто передают значения, не рассматривая их для согласования маршрутов. Это также зависит, если вы хотите, чтобы '/ articles' был допустимым маршрутом или только'/articles/someid'. –

+0

Фактически '/ article; page = 1' недействителен. Для этого произошла ошибка. Как упоминалось, дополнительные параметры маршрута на корневом маршруте сериализуются как параметры запроса, поэтому действителен только первый. '/ parent/child; someparam = somevalue? page = 1' будет действительным, так как' someparam' является параметром на дочернем маршруте. Я не знаю, как это происходит, когда у вас есть пустой путь корневого пути, а «статья» - это дочерний маршрут. В этом случае ваш второй пример может быть действительным. Должен был испытать, чтобы узнать, каким будет результирующее поведение. –