Vuex组件传参时的类型问题

Vuex组件传参时的类型问题


这是个很白痴的问题,但是确实花了我1个多小时才解决

问题背景

<transition name="slide-left" mode="out-in">
   <categoryList v-if="flag"
                 :search="search"
                 @selectCategory="selectCategory">
   </categoryList>
   <dishList v-else
             :search="search"
             :selectedID="selectedID"
             @closeDishList="closeDishList">
   </dishList>
 </transition>

categoryList是类别的列表
dishList是菜品的列表
我想选中一个类别之后显示该类别下的菜品列表
这就需要把从categoryList中选中的categoryID传入dishList

传入后再通过this.$store获取相应数据

// this.selectedID就是上面所说的categoryID
dishList () {
    var temp = []
    this.$store.state.dish.relationMap.get(this.selectedID).forEach(e => {
        temp.push(this.$store.state.dish.dishMap.get(e))
    })
    return temp
}

我的relationMap是Map(int, Set([int,int,int…]))
问题来了,this.$store.state.dish.relationMap.get(this.selectedID)返回的居然是undefined

解决方法

解决的过程很曲折,怀疑了很多可能性,最后发现居然是类型问题
categoryID是从categoryListemit出来的,emit的参数是<div>idid是一个string,所以实际上我返回的是string而不是int

showDishList (event) {
    // 这里的id是<div>的id
    this.$emit('selectCategory', event.currentTarget.id)
}

所以把获取数据的代码改成下面这样就行

// this.selectedID就是上面所说的categoryID
dishList () {
    var temp = []
    this.$store.state.dish.relationMap.get(parseInt(this.selectedID)).forEach(e => {
        temp.push(this.$store.state.dish.dishMap.get(e))
    })
    return temp
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值