Подтвердить что ты не робот

Несколько необязательных параметров с помощью angular ui-router

Я пытаюсь использовать несколько необязательных параметров с помощью ui-router, но он не работает. Ниже приведены тесты, которые я сделал:

Единственный параметр в порядке

state.url       url called     state param values

/page/:x        /page/         $stateParams.x == ""
/page/:x        /page/2        $stateParams.x == "2"

Один необязательный параметр в порядке

/page/:x?       /page/         $stateParams.x == ""
/page/:x?       /page/2        $stateParams.x == "2"

Два параметра в порядке (за исключением уродливых двойных слэшей в первом случае, /page и /page/ превращаются в /page//. Но поскольку параметры не являются необязательными, то ОК)

/page/:x/:y     /page//        $stateParams.x == "" && $stateParams.y == ""
/page/:x/:y     /page/2        $stateParams.x == "" && $stateParams.y == ""
/page/:x/:y     /page/2/       $stateParams.x == "2" && $stateParams.y == ""
/page/:x/:y     /page/2/3      $stateParams.x == "2" && $stateParams.y == "3"

Два необязательных параметра ведут себя странно. Второй параметр всегда undefined, и он не может решить первый параметр, когда я укажу второй.

/page/:x?/:y?   /page/         $stateParams.x == "" && $stateParams.y == undefined
/page/:x?/:y?   /page/2        $stateParams.x == "2" && $stateParams.y == undefined
/page/:x?/:y?   /page/2/       $stateParams.x == "" && $stateParams.y == undefined
/page/:x?/:y?   /page/2/3      $stateParams.x == "" && $stateParams.y == undefined
4b9b3361

Ответ 1

Необязательный параметр UI-Router не задается путем изменения URL-адреса. Скорее, они определяются с использованием объекта params в определении состояния.

Объявление url: '/page/:x?/:y?' не указывает x и y в качестве необязательных параметров. Вместо этого знак вопроса используется для разделения URL-адреса и параметра Параметр запроса URL-адреса.

Прочитайте текст описания в UrlMatcher docs и $stateProvider.state docs для url, затем для params.

В результате вы получите дополнительные параметры, настроенные так:

$stateProvider.state('page', {
  url: '/page/:x/:y',
  params: { 
    x: 5,  // default value of x is 5
    y: 100 // default value of y is 100
  }
})