-
数据类型全等对比
-
数据类型不能正常回填
-
router 的解析方式
主要区别在于 URL 编码 和 Vue Router 解析方式。
✅ 第一种写法(推荐)
const url = `/index`;
router.replace({
path: '/login',
query: {
redirect: url
}
});
/login?redirect=%2Findex
解析特点:
Vue Router 会自动处理 query 参数,确保 redirect 值被正确 URL 编码,比如 /index 变成 %2Findex。
浏览器解析 query 时,会正确识别 /index 作为 redirect 参数的值,而不会因为 / 产生解析歧义。
这是 Vue Router 推荐的用法,更加健壮,避免手写 URL 时的格式错误问题。
❌ 第二种写法(可能出错)
router.replace({
path: '/login?redirect=/index'
});
等价于跳转:
/login?redirect=/index
解析特点:
path 只解析 ? 之前的部分,因此 Vue Router 只会把 /login?redirect=/index 当成完整的路径,而不是 path: '/login' + query: { redirect: '/index' } 这样的结构。
不会触发 Vue Router 的 query 解析,而是直接把整个 ?redirect=/index 作为路径处理,可能导致:
/index 可能会被当成 Vue Router 的路径一部分,而不是 query 参数,影响 this.$route.query.redirect 获取数据。
如果 redirect 值中包含 ? 或 &,就会导致解析错误,影响页面跳转逻辑。
建议使用第一种写法,即传递 query 对象,让 Vue Router 负责 URL 编码和解析,以避免潜在的路径错误。
🔹 正确示例
router.replace({
path: '/login',
query: {
redirect: '/index'
} // 让 Vue Router 处理 URL 编码
});
这样写可以确保 /index 被正确解析为 query.redirect,而不会影响 Vue Router 的路径解析规则。
- 对话框关闭, options 的值是上一次 options 的值,select 组件 value 值,不在 options 范围内,导致 label 不能显示,显示的是 value 实际的值
解决方案 cancel 中将 options 置为初始化的值