#vue.js #vuejs2 #nuxt.js
Вопрос:
Я очень новичок в vue/nuxt и столкнулся с этой проблемой при реализации интерфейса для безголовой cms.
У меня есть два маршрута как таковые
Страницы
-StandardPage
->_standardPage.vue
-InfoPage
->_InfoPage.vue
У моих _standardPage.vue и _infoPage.vue есть этот код (пока тот же, но изменится) В основном им нужен идентификатор guid для получения информации о странице из Api. Информация о странице содержит различные блоки, которые затем являются динамически сгенерированными компонентами:
<template>
<div>
<Menu />
<div v-for="block in site.blocks" :key="block.id">
<component :is="block.blockName" :blockData="block"/>
</div>
</div>
</template>
<script>
export default{
data(){
return {
site: Object
}},
methods: {
this.site = result from async method, calling api to get page info by guid id (how do i get a hold of this guid)
}
}
теперь проблема в том, что в моем компоненте меню я выполняю выборку, чтобы получить отображаемое имя меню и соответствующий идентификатор страницы (пункты меню могут быть добавлены/удалены по прихоти, поэтому у меня нет возможности заранее узнать эти идентификаторы), Когда я нажимаю пункт меню, я хочу передать идентификатор страницы на свою стандартную или информационную страницу, чтобы они могли получить соответствующие данные, но безуспешно.
Я пытался передать $от ребенка к родителю, но у меня не получилось сделать это по всем маршрутам. Если я сделаю $router.push с помощью пути и запроса, я получу неприятный идентификатор guid в URL-адресе, и это выглядит не очень дружелюбно.
Как лучше всего передать мой идентификатор guid из компонента меню на мои маршрутизируемые страницы?
Комментарии:
1. Итак, это работает с некоторыми параметрами запроса, верно? router.vuejs.org/guide/essentials/…
2. Если im использует push-сообщение маршрутизатора с именем вместо пути, я могу отправить первый идентификатор guid, который я щелкну в меню, но он остается статичным и отправляет тот же идентификатор guid после этого, независимо от того, какой пункт меню я щелкну. Может быть, я как-то неправильно все подстроил?
3. Обычно вы должны предпочитать использовать
name
чемpath
и, конечно, называть свои компоненты в этом случае.
Ответ №1:
Если у вас есть кнопка в вашем родителе, которая выглядит так
<button @click="$router.push({ name: 'details-page', params: { guid: '123' } })">
test
</button>
и это в ребенке по имени /pages/details-page.vue
<script>
export default {
name: 'DetailsPage',
async fetch() {
console.log('route', this.$route.params.guid)
await axios...
},
}
</script>
Вы сможете загружать некоторые данные в детей, в зависимости от вашего guid
и без уродливого пути.
Комментарии:
1. Привет и спасибо, почти приехали! однако, если у меня теперь есть 2 или более «подробных страницы» и я перемещаюсь между ними, они указывают на один и тот же маршрут и отправляют один и тот же идентификатор. например,у меня есть страницы a,b, c (все подробные страницы), я нажимаю страницу a, и идентификатор guid 1 регистрируется, теперь я нажимаю страницу b, и идентификатор guid 1 все еще регистрируется
2. 1. у вас должно быть уникальное имя для ваших страниц. 2. если у вас нет уникального файла, в котором были бы все ваши дела, вы действительно можете разделить их на несколько страниц. 3. если вы хотите отправлять на разные страницы, вам нужно будет отправить некоторые динамические
.push({ name: dynamicName })
данные и, возможно, также обновитьguid
значение в зависимости от того, на какой элемент вы нажимаете. 4. Я не могу больше помочь без какого-либо кода в этой части. Возможно, попробуйте посмотреть с помощью devtools или что-тоconsole.log
еще, что вы на самом деле передаете со своим маршрутизатором, но это должно работать нормально, как показано в моем примере.3. Спасибо, может быть, я плохо объяснил проблему, однако вы направили меня в правильном направлении, и в конце концов я решил использовать vuex, чтобы просто обновить/сохранить текущий идентификатор guid страницы для легкого доступа.