SPART4K63
@SPART4K63
front-end developer

Как правильно передать данные через $route?

Здравствуйте, я использую nuxt.
У меня имеется такая конструкция элемента:
<div class="directory-sympthoms-content-list">
				<a 
				href="#"
				v-for="(item, key, index) of sympthoms"
				:key = "item.id"
				@click.prevent = "openSympthom(item)"
				class="directory-sympthoms-content-list__item base-h2">
					{{ item.title }}
				</a>
			</div>
<script>
	import axios from 'axios'
	export default {
		data() {
			return {
				sympthoms: []
			}
		},
		methods: {
			openSympthom(item) {
				this.$router.push('/directory/sympthoms/' + item.id)
			}
		},
		mounted() {
			axios
			.get('json/directory/allergy.json')
			.then(response => this.sympthoms = response.data)
		}
	}
</script>


У меня есть page directory/sympthoms/_title.vue

Конструкция этого page:

<template>
	<div class="directory-sympthoms">

		<NuxtLink class="go-away" to="/directory">
			<BaseIconArrowLeft class="go-away__icon" />
			<BaseH1 class="blue"> {{ $route.params.title }}</BaseH1>
		</NuxtLink>

		<div class="container">
			{{ $route.params }}
		</div>

	</div>
</template>

<style scoped lang="scss">
	@import '~/assets/scss/directory.scss';
</style>

<script>
	import axios from 'axios'
	import {mapActions, mapGetters} from 'vuex'
	export default {
		// data() {
		// 	return {
		// 		sympthoms: []
		// 	}
		// },
		methods: {
			openSympthom(item) {
				this.$router.push('/directory/sympthoms/' + item.title)
			}
		},
		// mounted() {
		// 	axios
		// 	.get('json/directory/allergy.json')
		// 	.then(response => this.sympthoms = response.data)
		// }
	}
</script>


Я хочу добиться того чтобы я мог вывести и остальную информацию из элемента JSON помимо title.
Мой JSON :
[{"id":"1","title":"Аллергическая сыпь (крапивница)","content":"Аллергическая сыпь может являться либо не являться аллергической реакцией.Если аллергическая сыпь длилась менее 6 недель, то причиной обычно является аллергическая реакция на конкретное вещество, острая инфекция или неаллергическая реакция на конкретное вещество.Если аллергическая сыпь длилась 6 недель и более, то причина обычно не может быть выявлена (идиопатическая) или причиной является аутоиммунное заболевание.Люди должны вызывать скорую помощь, если у них затрудненное дыхание или если они чувствуют, что их горло как будто закрывается.Люди с симптомами легкой степени тяжести должны избегать любых известных или подозреваемых провоцирующих факторов и могут принимать антигистаминные препараты для облегчения симптомовЛюди с тяжелыми реакциями должны иметь адреналиновый шприц-ручку для самостоятельных инъекций и, если возникает реакция, немедленно использовать его.","date":"22.03.21","time":"12:30"},{"id":"2","title":"Бессонница и чрезмерная дневная сонливость","date":"22.01.21","time":"10:30"},{"id":"3","title":"Газы","date":"22.01.21","time":"10:30"},{"id":"4","title":"Головная боль","date":"22.01.21","time":"10:30"},{"id":"5","title":"Головокружение и системное головокружение","date":"22.01.21","time":"10:30"},{"id":"6","title":"Желтуха у взрослых","date":"22.01.21","time":"10:30"},{"id":"7","title":"Желтуха у новорожденных (гипербилирубинемия)","date":"22.01.21","time":"10:30"},{"id":"8","title":"Затрудненное глотание","date":"22.01.21","time":"10:30"},{"id":"9","title":"Зуд","date":"22.01.21","time":"10:30"}]


Подскажите пожалуйста как правильнее это сделать)
  • Вопрос задан
  • 328 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега Vue.js
Тлен
Передавать данные скрыто через route params - плохо (но возможно push({name: <name>, params: {...}})). Если кто-то откроет страничку напрямую - он ничего не увидит.
Каждая страничка должна уметь получить данные самостоятельно.

Решения два:
1. Забить и положиться на кэширование брузера: первую загрузку json он кэширует, вторую подцепит из памяти, задержка будет минимальна.
2. Вон у вас vuex подключён, кладите туда данные и показывайте данные оттуда. И только если денных там нет - загружайте их туда. Независимо от страницы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы