常见错误之,全等 === 没能正常走逻辑,select 组件 输入框的 value 是 String,options 的 value 是 Number等问题

44 阅读1分钟
  1. 数据类型全等对比

  2. 数据类型不能正常回填

  3. 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 的路径解析规则。

  1. 对话框关闭, options 的值是上一次 options 的值,select 组件 value 值,不在 options 范围内,导致 label 不能显示,显示的是 value 实际的值

解决方案 cancel 中将 options 置为初始化的值