【问题标题】:Vue Router with Boolean Query Parameter带有布尔查询参数的 Vue 路由器
【发布时间】:2018-03-14 17:21:56
【问题描述】:

问题:我有一个组件需要一个可选的布尔值作为从视图应用程序内部和外部应用程序调用的一部分传递给它。当我直接调用路由器时,我可以毫无问题地传递布尔值,但如果我使用实际 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 警告]:无效的道具:道具“booleanParam”的类型检查失败。 预期布尔值,得到字符串。

【问题讨论】:

    标签: javascript vue.js vue-router


    【解决方案1】:

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

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

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


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

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

    【讨论】:

    • 对此有一个警告,如果您要使用布尔参数执行 router.push,您应该执行以下操作以支持这两种路径: props: (route) => ({ booleanParam: (route.query.booleanParam === 'true' || route.query.booleanParam === true) })
    【解决方案2】:

    你试过了吗

       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  }
    

    【讨论】:

    • 我认为第一部分是我在上面的问题中得到的。由于参数是可选的 foo/:boolean 参数不适用于我的用例,因此使用查询参数。
    猜你喜欢
    • 2017-06-22
    • 1970-01-01
    • 2021-02-08
    • 2021-11-25
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多