闽公网安备 35020302035485号
<template>
<el-button @click="goToDetail">跳转到详情页</el-button>
</template>
<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()
const goToDetail = () => {
router.push({
path: '/detail',
query: {
id: '123',
name: '示例数据'
}
})
}
</script>
接收参数组件<template>
<div>
<h3>详情页</h3>
<p>ID: {{ $route.query.id }}</p>
<p>名称: {{ $route.query.name }}</p>
</div>
</template>
<script setup>
import { useRoute } from 'vue-router'
const route = useRoute()
// 在脚本中获取参数
console.log('接收的ID:', route.query.id)
console.log('接收的名称:', route.query.name)
</script>
1.3 优缺点及适用场景• 适用场景:适用于传递简单的、非敏感的数据,如页面的 ID、页码、筛选条件等。
<template>
<el-button @click="goToEditor">跳转到编辑页</el-button>
</template>
<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()
const goToEditor = () => {
const row = {
description: '这是一段描述',
code: 'CODE123',
value: '示例值'
}
router.push({
name: 'EditorButton',
state: {
description: row.description,
code: row.code,
value: row.value
}
})
}
</script>
接收参数组件<template>
<div>
<h3>编辑页</h3>
<p>描述: {{ editInfo.description }}</p>
<p>编码: {{ editInfo.code }}</p>
<p>值: {{ editInfo.value }}</p>
</div>
</template>
<script setup>
import { reactive } from 'vue'
// 从 history 中获取 state 数据
const editInfo = reactive(history.state || {})
// 堆代码 duidaima.com
// 处理页面刷新可能导致的参数丢失问题
if (!editInfo.code) {
console.warn('参数可能因页面刷新而丢失')
// 可以在这里添加相应的处理逻辑,如跳回上一页
}
</script>
2.3 优缺点及适用场景• 适用场景:适用于传递中等规模的数据,且不希望参数暴露在 URL 中的场景,如编辑页面所需的表单数据等。
3.2 代码示例
Pinia store 文件(store.js)
import { defineStore } from 'pinia'
export const useDataStore = defineStore('data', {
state: () => ({
sharedData: null
}),
actions: {
setSharedData(data) {
this.sharedData = data
},
clearSharedData() {
this.sharedData = null
}
}
})
跳转组件<template>
<el-button @click="goToDetailPage">跳转到详情页</el-button>
</template>
<script setup>
import { useRouter } from 'vue-router'
import { useDataStore } from './store'
const router = useRouter()
const dataStore = useDataStore()
const goToDetailPage = () => {
const data = {
id: '456',
name: '通过Pinia传递的数据',
content: '这是一段较长的内容...'
}
dataStore.setSharedData(data)
router.push('/detailPage')
}
</script>
接收参数组件<template>
<div>
<h3>详情页</h3>
<p>ID: {{ dataStore.sharedData?.id }}</p>
<p>名称: {{ dataStore.sharedData?.name }}</p>
<p>内容: {{ dataStore.sharedData?.content }}</p>
</div>
</template>
<script setup>
import { onUnmounted } from 'vue'
import { useDataStore } from './store'
const dataStore = useDataStore()
// 组件卸载时清理数据,避免影响其他页面
onUnmounted(() => {
dataStore.clearSharedData()
})
</script>
• 适用场景:适用于传递复杂数据,或者需要在多个组件、多个页面中共享的数据,如用户信息、购物车数据等。
• 面对复杂数据或需要跨组件、跨页面共享的数据,选择 Pinia(或 Vuex)传参,借助状态管理库实现可靠的数据共享。