vue3 中 如何跨页面传值

在Vue 3中,跨页面传值可以通过多种方式实现,具体选择哪种方法取决于应用的具体需求和页面间的关系。以下列举了几种常见的跨页面传值方法:

1. 路由参数与查询参数

当页面间通过路由进行跳转时,可以利用vue-router的路由参数或查询参数来传递数据。

  • 路由参数 :适用于动态路由,即路由路径中包含动态片段(如/:id)。在跳转时,直接将值赋给对应的动态参数。
js 复制代码
// 跳转并传递路由参数
import { useRoute, useRouter } from 'vue-router';

const router = useRouter();
router.push({ name: 'TargetPage', params: { id: someValue } });

// 接收路由参数
const route = useRoute();
const receivedId = route.params.id;
  • 查询参数 :在URL后面附加?key=value形式的查询字符串。适用于传递临时、非敏感的数据。
js 复制代码
// 跳转并传递查询参数
import { useRouter } from 'vue-router';

const router = useRouter();
router.push({ path: '/target', query: { inputInt: someValue } });

// 接收查询参数
import { useRoute } from 'vue-router';

const route = useRoute();
const receivedInputInt = route.query.inputInt;

2. Vuex状态管理

对于需要在多个页面间共享的数据,或者涉及复杂状态流转的情况,可以使用Vuex作为全局状态管理工具。

  • 定义状态与 mutations:在Vuex store中定义共享状态和相应的方法(mutations)来更新状态。
js 复制代码
// store.js
import { createStore } from 'vuex';

export default createStore({
  state: {
    sharedData: null,
  },
  mutations: {
    setSharedData(state, data) {
      state.sharedData = data;
    },
  },
});
  • 在页面中使用 :通过useStore钩子访问和操作全局状态。
js 复制代码
// 发送端页面
import { useStore } from 'vuex';

const store = useStore();
store.commit('setSharedData', someValue);

// 接收端页面
import { useStore } from 'vuex';

const store = useStore();
const sharedData = store.state.sharedData;

3. localStorage/sessionStorage

对于需要持久化存储并在不同页面间共享的数据,可以使用浏览器的localStoragesessionStorage API。

  • 存储数据
js 复制代码
// 存储数据
localStorage.setItem('sharedDataKey', JSON.stringify(someValue));
  • 读取数据
js 复制代码
// 读取数据
const storedData = JSON.parse(localStorage.getItem('sharedDataKey'));

4. Broadcast Channel API

对于浏览器同源下的多个标签页或窗口间的通信,可以使用BroadcastChannel API。

  • 发送数据
js 复制代码
// 创建广播通道
const channel = new BroadcastChannel('my-channel');

// 发送消息
channel.postMessage(someValue);
  • 接收数据
js 复制代码
// 创建广播通道
const channel = new BroadcastChannel('my-channel');

// 监听消息
channel.onmessage = function(event) {
  const receivedValue = event.data;
  // 处理接收到的数据
};

5. window.postMessage

对于跨窗口(如弹出窗口、iframe等)间的通信,可以使用window.postMessage API。

  • 发送数据
js 复制代码
// 向目标窗口发送消息
window.opener.postMessage({ data: someValue }, '*');
  • 接收数据
js 复制代码
// 监听`message`事件
window.addEventListener('message', function(event) {
  if (event.origin === expectedOrigin) {
    const receivedValue = event.data.data;
    // 处理接收到的数据
  }
}, false);

根据实际应用场景选择合适的方法,或者结合使用这些技术,可以有效地实现在Vue 3项目中跨页面传值。记得在使用时注意数据的安全性、隐私保护及浏览器兼容性问题。

相关推荐
山楂树の44 分钟前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
本山德彪1 小时前
我做了一个拼豆图纸生成器,把照片秒变图纸
前端
DTrader1 小时前
用TS无法实盘量化? - 实盘均线策略
前端·api
进击的夸父1 小时前
vfojs:Vue 超集架构,外壳React灵魂Vue
前端
编程老船长1 小时前
解决不同项目需要不同 Node.js 版本的问题
前端·vue.js
Wect1 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·算法·typescript
漫游的渔夫1 小时前
前端开发者做 Agent:别写成一次请求,用 5 步受控循环防止 AI 乱跑
前端·人工智能·typescript
kyriewen3 小时前
Webpack vs Vite:一个是“老黄牛”,一个是“猎豹”,你选谁?
前端·webpack·vite
打小就很皮...3 小时前
html2canvas + jsPDF 生成 PDF 的踩坑与解决方案总结
前端·pdf
全栈前端老曹3 小时前
【前端地图】多地图平台适配方案——高德、百度、腾讯、Google Maps SDK 差异对比、封装统一地图接口
前端·javascript·百度·dubbo·wgs84·gcj-02·bd09