Angular2 с обозначением символа URL

Является ли матричная url-нотация "по умолчанию" для создания URL-адресов с параметрами или лучше использовать "старую" нотацию? и &. Я не понял этого в документации angular.io

localhost:3000/heroes;id=15;foo=foo

или

localhost:3000/heroes?id=15&foo=foo

Ответ 1

Параметры матрицы привязаны к сегменту пути, а параметры запроса привязаны к URL. У них разная семантика. Используйте то, что более подходит. (см. ссылки в разделе "см. также" ниже).

Может быть, это трудно сказать, потому что вы всегда видите его в конце URL-адреса, но это также матричные параметры

localhost:3000/heroes;id=15;foo=foo/bar/baz

Параметры привязаны к heroes. Когда вы перейдете к route.url, вы увидите это

this.route.url.subscribe((url: UrlSegment[]) => {
  let heroes = url[0];
  let heroesMatrix = heroes.parameters();
  // heroes should contain id=5, foo=foo
  let bar = url[1].path;
  let baz = url[2].path;
})

Является ли матричная url-нотация "по умолчанию" для создания URL-адресов с параметрами или лучше использовать "старую" нотацию с?

Нет, оба могут быть использованы, и как их использовать (создавать) совершенно разные

  • Параметры матрицы привязаны к каждому сегменту пути, передавая объект после элемента пути в массиве

    router.navigate(['/foo', { id:1 }, 'bar', {baz: 2 } ])
    

    Здесь вы получите /foo;id=1/bar;baz=2

  • параметры запроса создаются путем передачи NavigationExtras в качестве второго аргумента для навигации по

    router.navigate(['/foo'], { queryParams: { bar: 1, baz: 2 }});
    

    Здесь вы получаете /foo?bar=1&baz=2

См. также:

ОБНОВЛЕНИЕ (отказ от ответственности)

Если вы читаете документацию Angular по необязательным параметрам, они считают, что приведенная выше семантика не очень важна для работы с Angular. Я, наверное, должен согласиться. Семантика важнее с API REST.

При использовании приложения Angular единственные люди, которые действительно заботятся об этих параметрах, - это разработчик. Пользователю все равно. Это не REST API, где мы должны придерживаться хорошо известной семантики. Для приложения Angular, если разработчик знает, как использовать параметры (будь то матрица или запрос), не имеет значения, какой из них мы используем.

При этом параметры матрицы менее подробные для кода, поэтому лично я бы сказал, что использование параметров матрицы может быть лучшим способом.