Angular Dart: правила сопоставления для пути маршрута - неявный подстановочный знак суффикса?

Рассмотрим (выдержка из учебника по AngularDart):

router.root
  ..addRoute(
      name: 'add',
      path: '/add',
      enter: view('view/addRecipe.html'))

Как URL-адрес соответствует такому пути? Есть ли неявный подстановочный суффикс, такой как /add/* или, может быть, /add*? Если да, то как сделать так, чтобы /add точно соответствовало /add, чтобы избежать конфликтов, скажем, с /address?


person Patrice Chalin    schedule 30.01.2014    source источник


Ответы (2)


Правильно, UrlTemplate соответствует наивному префиксу, поэтому /add будет соответствовать /address.

Если вас беспокоят конфликты между двумя маршрутами, когда путь одного из них является префиксом другого, то правильный подход состоит в том, чтобы указать наиболее конкретный путь первым. Например:

router.root
  ..addRoute(
      name: 'address',
      path: '/address',
      enter: view('view/address.html'))
  ..addRoute(
      name: 'add',
      path: '/add',
      enter: view('view/addRecipe.html'))

Маршрутизатор сопоставляет маршруты в том порядке, в котором они указаны, поэтому он выбирает первый совпадающий. Таким образом, /address всегда будет соответствовать маршруту address, а /add всегда будет соответствовать маршруту add.

Если вас беспокоят непреднамеренные совпадения /addFoo и /add, боюсь, в настоящий момент нет простого способа убедиться в этом. Если вы твердо настроены по этому поводу, пожалуйста, запросите функцию для пакета route_hierarchical.

person pavelgj    schedule 31.01.2014

Если вы посмотрите исходный код (client.dart в пакете route_hierarchial, который, в свою очередь, используется AngularDart), вы заметите, что путь используется как ключ к карте. Это означает, что если ваш путь установлен на /add, он не будет соответствовать /address.

person markovuksanovic    schedule 31.01.2014