【vant】配合 van-popup 使用 van-picker 多级联动,回显赋默认值 遇到的坑及解决方案

先吐槽一句,van-picker 真心不怎么好用。。。

页面大概是这个样子:

代码结构大概是这个样子:

<!-- 选择 收支类型弹窗 -->
<van-popup ref = "accountTypePopup" v-model="showPicker" position="bottom">
    <van-picker
        ref = "accountTypePopup2"
        show-toolbar
        :columns="columns"
        @cancel="showPicker = false"
        @confirm="onConfirm"
        @change="onChange"
        
    />
</van-popup>
methods: {
    // ...
    // 修改 columns 方法
    changeColumns(p_name, name) {
        // p_name 一级分类回显值
        // name 二级分类回显值
        
        // 类型列表
        var typeList =
            this.tabActive === 0
                ? this.expendTypeList
                : this.incomeTypeList;

        // 设置 收支类型选项 columns 的默认值 和 子选项
        this.columns[0]["defaultIndex"] = this.columns[0][
            "values"
        ].findIndex(item => item === p_name);

        this.columns[1]["values"] = typeList[p_name];

        this.columns[1]["defaultIndex"] = this.columns[1][
            "values"
        ].findIndex(item => item === name);
    }
}

期望是:popup弹出后,picker选中用户已经选中的选项

结果是:仅第一次popup弹出后,picker选中用户已经选中的选项,之后的弹出一直展示第一次的列表

查看文档,解决方案是用van-picker的方法:

坑就坑中,组件嵌套(popup套picker),用ref获取不到 picker 实例

咋整?

用调试工具调试了半天发现,picker实例化成DOM元素后,即使隐藏,也仅仅是display:none,不会重新实例化

那就好办了。。。

<!-- 选择 收支类型弹窗 -->
<van-popup ref = "accountTypePopup" v-model="showPicker" position="bottom">
    <van-picker
        ref = "accountTypePopup2"
        show-toolbar
        :columns="columns"
        @cancel="showPicker = false"
        @confirm="onConfirm"
        @change="onChange"

        // 这里是新加的 //
        :key = "account_type_value"
        
    />
</van-popup>

添加一个key属性,值为【一级项+二级项】,问题圆满解决!!!

 

各位大神有啥更好的方案,欢迎留言

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值