具有布尔查询参数的 Vue 路由器

Vue Router with Boolean Query Parameter

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

路由器:

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

组件:

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

<script>
export default {
    name: 'Foo',
    props: {
        booleanParam: {
            type: Boolean,
            required: false
        }
    }
}
</script>

作品:

router.push( { name: 'Foo', query: { booleanParam: true } })

生成警告:

http://localhost:8080/foo?booleanParam=true

警告:

[Vue warn]: Invalid prop: type check failed for prop "booleanParam". Expected Boolean, got String.

你试过这个吗

   const router = new VueRouter({
      routes: [
        { 
        path: '/foo',
        name:"Foo"
        component: Foo, props: (route) => ({ query: route.query.q }) }
      ]
    })

    OR

    {path:'/foo/:booleanParam', name:'Foo', component: Foo  }

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

props: (route) => ({ booleanParam: (route.query.booleanParam === 'true') })

这样可以确保类型正确。


编辑: 正如 OP 在支持 String 和 Boolean 的评论中指出的那样,可以将参数转换为 String 以确保两种类型都有效:

props: (route) => ({ booleanParam: (String(route.query.booleanParam). toLowerCase() === 'true') })