2014-01-30 3 views
3

Рассмотрим (отрывок из AngularDart tutorial):Угловой Дарт: соответствующие правила для маршрута - неявный суффикс-символ?

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

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

ответ

4

Исправлено, 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, на данный момент я боюсь, что нет простого способа обеспечить это. Если вы решительно настроены на это, пожалуйста, file a feature request против route_hierarchical package.

0

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