带有布尔查询参数的 Vue Router

Ros*_*aur 3 javascript vue.js vue-router

问题:我有一个组件,它需要一个布尔值作为从视图应用程序内部和外部应用程序调用的一部分可选地传递给它。当我直接调用路由器时,我可以毫无问题地传递布尔值,但如果我使用实际 URL 进行路由,则会收到解析警告。为了防止出现警告,我应该使用字符串并自己解析吗?

路由器:

export default new Router({
  routes: [
    {
      path: '/foo',
      name: 'Foo',
      component: Foo,
      props: (route) => ({ booleanParam: route.query.booleanParam })
    }
  ]
})
Run Code Online (Sandbox Code Playgroud)

成分:

<template>
    <div>
        BooleanParam: {{booleanParam}}
    </div>
</template>

<script>
export default {
    name: 'Foo',
    props: {
        booleanParam: {
            type: Boolean,
            required: false
        }
    }
}
</script>
Run Code Online (Sandbox Code Playgroud)

作品:

router.push( { name: 'Foo', query: { booleanParam: true } })
Run Code Online (Sandbox Code Playgroud)

产生警告:

http://localhost:8080/foo?booleanParam=true
Run Code Online (Sandbox Code Playgroud)

警告:

[Vue 警告]:无效的道具:道具“booleanParam”的类型检查失败。预期布尔值,得到字符串。

a--*_*--m 6

如果组件需要布尔值,则在将其设置为 prop 之前将该值解析为布尔值:

props: (route) => ({ booleanParam: (route.query.booleanParam === 'true') })
Run Code Online (Sandbox Code Playgroud)

这样可以确保正确的类型。


编辑: 正如 OP 支持 String 和 Boolean 的评论中所述,可以将参数转换为 String 以确保两种类型都可以工作:

props: (route) => ({ booleanParam: (String(route.query.booleanParam). toLowerCase() === 'true') })
Run Code Online (Sandbox Code Playgroud)

  • 对此有一个警告,如果您打算使用布尔参数执行 router.push,您应该执行以下操作以支持这两个路径: props: (route) =&gt; ({ booleanParam: (route.query.booleanParam == = '真' || route.query.booleanParam === true) }) (2认同)