js页面跳转传值

本文介绍了JavaScript进行页面跳转时传递参数的三种方式:1) URL路径附带参数;2) 使用localStorage或sessionStorage存储和读取数据;3) 将复杂数据转换为JSON对象存储。注意在离开页面时清除存储的数据以保护用户隐私。

1、在url路径后面带参数,参数与url之间用?隔开,参数与参数之间用&符隔开

window.location.href = “a.html?name='val'&age='val'";

2、通过localStorage 和 sessionStorage 先存本地在取出数据

//存数据

window.localStorage.setItem("key", val);
//我一般常用下面这个 第一个参数是 名字,第二个参数是存数的数据
window.sessionStorage.setItem("key", val);

//取数据

window.localStorage.getItem("key");
第一个参数是 名字,第二个参数是存数的数据
window.sessionStorage.getItem("key");

小细节

对象转字符串 JSON.stringify( ” 对象 ” )

字符串转对象 JSON.parse( ” 字符串 ” )
最后:
离开页面一定要去除这个会话中的数据,防止个人隐私被盗用

//页面刷新时启动方法
	window.onbeforeunload = function() //
		{	
			//清除sessionStorage值
			sessionStorage.removeItem('movieId');
			sessionStorage.removeItem('cinemaId');
		}

3.若是所需传的值过多可以把它存储为Json对象
存储时,通过JSON.stringify()将对象转换为文本格式;读取时,通过JSON.parse()将文本转换回对象。

var empty = {
    name: 'tom',
    age: 22
};
// 存储值:将对象转换为Json字符串
sessionStorage.setItem('eg', JSON.stringify(empty));
// 取值时:把获取到的Json字符串转换回对象
var eg1 = sessionStorage.getItem('eg');
empty = JSON.parse(eg1);
console.log(empty .name); // => tom
<think> 首先,用户在询问Vue页面跳转的实现方法。我需要基于系统指令和提供的引用内容来回答。 系统指令的关键点: - 所有行内数学表达式用$...$(但这个主题不涉及数学,所以可能不需要)。 - 独立公式用$$...$$(同样不适用)。 - LaTeX语法正确(这里可能不相关)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 用户的问题:"我想查找vue页面跳转的方法 请问vue页面跳转的实现方法" 提供的引用: - [^1]: 使用`this.$router.push` with `query` 参数,例如:`this.$router.push({path:"/goods/productCategory",query:{...row}});`。这会将参数附加到URL中。 - [^2]: 使用`<router-link>` with `params`,例如:`<router-link :to="{name: 'B', params: {id:'1'}}">页面跳转</router-link>`。这使用命名路由和参数。 - [^3]: 描述了一个更复杂的场景,涉及多个项目通过iframe跨项目通信和URL。 - [^4]: 总结说使用`query`时参数显示在URL中,而`params`不会。 从这些引用中,我提取关键信息: - Vue Router提供了两种主要方式:`query` 和 `params`。 - `query` 用于URL查询参数,可见在URL中。 - `params` 用于动态路由参数,通常定义在路由配置中。 用户的需求是查找Vue页面跳转的方法,具体是和接收的基本实现。 我的回答结构: 1. **介绍**: 简要概述Vue Router方法。 2. **逐步解释实现方法**: - 使用 `query` 参数(基于引用[1]和[^4])。 - 使用 `params` 参数(基于引用[^2])。 - 提及其他方法如状态管理(Vuex)或本地存储,如果需要。 3. **代码示例**: 提供代码片段来演示和接收。 4. **接收的方法**: 解释如何在目标页面获取。 5. **注意事项**: 如URL可见性、大小限制等。 6. **生成相关问题**: 在末尾添加相关问题。 引用标识: - 在回答中,如果我提到某个引用内容,末尾添加引用标识,如[^1]。 - 例如,当描述使用`query`方法时,引用[^1]。 步骤回答: - **步骤1: 使用query参数** - 代码: `this.$router.push({ path: "/target", query: { key: value } });` - 接收: 在目标页面使用`this.$route.query.key`。 - 引用[^1]和[^4]支持这一点。 - **步骤2: 使用params参数** - 代码: 需要命名路由,`this.$router.push({ name: "target", params: { id: value } });` - 路由配置中必须有动态段,如`path: "/target/:id"`。 - 接收: `this.$route.params.id`。 - 引用[^2]支持。 - **步骤3: 其他方法** - 使用状态管理(Vuex)或事件总线。 - 使用本地存储(localStorage/sessionStorage),但主要用于持久化数据。 - 引用[^3]提到跨项目通信,这可能更高级。 确保语言为中文。 生成相关问题: - 在末尾添加相关问题,如: 1. query和params的区别是什么? 2. 如何在Vue中处理大型对象的? 3. Vuex在页面中的应用场景? 最终回答结构: 1. 开头: 直接回答用户问题。 2. 主体: 清晰步骤。 3. 结束: 相关问题。 </think> 以下是关于 Vue 页面跳转实现方法的详细解答。基于 Vue Router 的官方实践和常见开发模式,我将逐步说明如何实现页面跳转时的递和接收,包括代码示例、注意事项和相关引用。本文档使用中文,结构清晰,便于理解。 ### Vue 页面跳转的主要方法 Vue Router 提供标准的机制,主要有两种方式:`query` 参数(用于 URL 可见的查询参数)和 `params` 参数(用于动态路由参数,隐藏在 URL 中)。每种方法都包含和接收两个步骤。以下以 Vue 2.x 为例(Vue 3.x 类似),所有示例代码可直接在项目中使用。 #### 方法一:使用 `query` 参数(URL 可见) `query` 方法会将递的附加在 URL 中,适合递少量参数(如 ID、名称等),用户可直接在地址栏看到参数。 **优点**: 简单易用,支持刷新页面后参数不丢失。 **缺点**: 参数暴露在 URL 中,不适合敏感数据;URL 长度有限制,不适合大型对象。 - **步骤 1:在源页面** 使用 `this.$router.push` 方法,通过 `query` 属性递对象。 示例代码(基于引用[^1]): ```javascript // 在某个方法中(如按钮点击事件) gotoPage(row) { this.$router.push({ path: "/target-page", // 目标路径 query: { id: row.id, name: row.name } // 递的参数对象 }); } ``` 执行后,URL 会变为类似 `/target-page?id=123&name=example` 的形式[^1][^4]。 - **步骤 2:在目标页面接收** 使用 `this.$route.query` 访问递的对象。 示例代码: ```javascript // 在目标页面的 Vue 组件中(如 created 或 mounted 钩子) export default { created() { const id = this.$route.query.id; // 获取 id 参数 const name = this.$route.query.name; // 获取 name 参数 console.log("Received data:", id, name); // 输出结果 } } ``` #### 方法二:使用 `params` 参数(URL 隐藏) `params` 方法基于动态路由,递的不会显示在 URL 中,适合递敏感或复杂数据(如用户 token)。 **优点**: 参数隐蔽,URL 更简洁。 **缺点**: 需要预定义路由路径;刷新页面后参数可能丢失(除非结合状态管理)。 - **步骤 1:定义路由配置** 在 `router/index.js` 中,为目标路由添加动态参数(如 `:id`)。 示例代码: ```javascript // 路由配置文件 const routes = [ { path: "/target-page/:id", // 动态参数 id name: "TargetPage", // 命名路由(必须) component: TargetPage } ]; ``` - **步骤 2:在源页面** 使用 `this.$router.push` 与命名路由(`name`)和 `params` 属性(基于引用[^2])。 示例代码: ```javascript // 在源页面的方法或模板中 gotoPage() { this.$router.push({ name: "TargetPage", // 对应路由的 name params: { id: "123", data: { key: "value" } } // 递的参数对象 }); } ``` 或者在模板中使用 `<router-link>`: ```vue <template> <router-link :to="{ name: 'TargetPage', params: { id: '123' } }">跳转到目标页</router-link> </template> ``` 执行后,URL 显示为 `/target-page/123`,但 `params` 对象不会暴露[^2][^4]。 - **步骤 3:在目标页面接收** 使用 `this.$route.params` 访问。 示例代码: ```javascript // 在目标页面的 Vue 组件中 export default { created() { const id = this.$route.params.id; // 获取 id 参数 console.log("Received id:", id); } } ``` #### 其他方法(高级场景) - **状态管理(如 Vuex)**: 适合复杂应用或多页面共享数据,不依赖 URL。示例:在 Vuex store 中存储,目标页面通过 `this.$store.state` 获取[^3]。 - **本地存储(如 localStorage)**: 适合持久化数据,但需手动清理。示例: ```javascript // 源页面 localStorage.setItem("tempData", JSON.stringify({ key: "value" })); this.$router.push("/target-page"); // 目标页面 const data = JSON.parse(localStorage.getItem("tempData")); ``` - **跨项目通信(如 iframe)**: 基于引用[^3],可使用 `postMessage` API 或 URL 参数递,但需处理项目间协调。 ### 注意事项 1. **参数大小限制**:`query` 方法受 URL 长度限制(通常 2KB),避免递大型数组或对象;`params` 方法无此问题,但需确保路由配置正确。 2. **数据安全**:敏感数据(如密码)推荐用 `params` 或 Vuex,避免暴露在 URL 中[^4]。 3. **刷新处理**:`params` 参数在页面刷新后可能丢失,建议结合 Vuex 或 sessionStorage 缓存。 4. **Vue Router 版本**:以上示例兼容 Vue 2.x 和 3.x。在 Vue 3 中,API 基本相同,但导入方式略有差异。 5. **引用总结**:`query` 参数显示在 URL 中,`params` 参数隐藏,后者更安全但需要预定义路由[^4]。 ### 相关问题 如果您已理解基础方法,以下问题可帮助深化知识: 1. `query` 和 `params` 有什么区别?如何根据场景选择? 2. 如何在 Vue 中递大型对象(如数组或嵌套数据)而不影响性能? 3. Vuex 在页面中的具体应用有哪些优势和限制? 如果有具体代码或场景需求,请告知,我可以提供进一步优化建议!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值