#javascript #vue.js #ecmascript-6 #vuejs2 #vue-router
#javascript #vue.js #ecmascript-6 #vuejs2 #vue-маршрутизатор
Вопрос:
Работая с VueRouter, я хочу включить вход по этим URL-адресам:
category/apple
category/banana
category/pear
Возможно ли ограничить параметр маршрутизатора определенными строками? (банан, яблоко, груша)?
Я ничего не могу найти в документации конкретно об этом. и я погуглил, чтобы найти некоторые другие решения, которые не работают:
{
path: 'category/:categoryType',
props: true,
/*props: {
validator: function (value) {
return ( value === 'banana' || value === 'apple' || value === 'pear');
}
},*/
component: someComponent
},
Единственное решение, которое я могу придумать прямо сейчас, — это проверить это в created()
внутри компонента.
Ответ №1:
Я думаю, что этот код является решением вашего случая:
const allowedCategoryNames = ['apple', 'banana', 'pear'];
const categoryRoutePath = '/category/:categoryName(' allowedCategoryNames.join('|') ')';
{
path: categoryRoutePath,
props: true,
component: someComponent
},
и в вашем компоненте вы можете получить текущее имя cutegory следующим образом:
const currentCategory = this.$route.params.categoryName;
Это должно сработать =)
Некоторые примеры можно найти здесь: примеры регулярных выражений vue-router
Комментарии:
1. Если вы установите
props: true
, то параметры маршрута могут быть доступны с помощьюthis.categoryName
.2. разве я не могу просто добавить всю
categoryRoutePath
переменную в виде строки подpath:
? Почему необходимо устанавливать его внутри переменной? (не тестировал это да, afk).3. @wellhellothere, я протестировал приведенный выше код =) Конечно, вы просто можете добавить строковый литерал вместо переменной, но если вы расширите список названий категорий, вам нужно будет отредактировать путь маршрута. В любом случае, вы можете заменить
path: categoryRoutePath
наpath: '/category/:categoryName(apple|banana|pear)'
.