uview 封装u-popup 支持v-model

如果直接使用:value与@input的语法糖解构,还是会有问题,具体表现为:

  • 关闭时popup会上下横跳、抖动一下,再关闭
  • 关闭后,popup可能不会再展现,即使v-model的值再次被设为true
    注意:uview的版本为1.x
  • 直接上代码
<template>
  <u-popup :value="value" mode="bottom" @close="closeHandler">
    <view style="height: 40vh">我是popUp的内容</view>
  </u-popup>
</template>

<script>
  export default {
    props: {
      value: {
        type: Boolean,
        default: false,
      },
    },
    data() {
      return {}
    },
    methods: {
      inputHandler(val) {
        this.$emit('input', val)
      },
      confirmHandler(item = null) {
        this.$emit('confirm', item )
        this.inputHandler(false)
      },
      closeHandler() {
        this.$emit('close')
        this.inputHandler(false)
      },
    },
  }
</script>

注意:这里的confirmHandler是用来处理业务的,比如在这个popup里面展示里面,点击列表中的一项,需要关闭popup,甚至返回所点击项对应的数据

  • 父级调用:
<template>
  <view>
    <u-button @click="show = true">展示popup</u-button>
    <MyPopUp v-model="show"></MyPopUp>
  </view>
</template>

<script>
  import MyPopUp from './MyPopUp.vue'
  export default {
    components: { MyPopUp },
    data() {
      return {
        show: false,
      }
    },
    methods: {},
  }
</script>

MyPopUp就是第一点的代码,最后简单说明下思路,不使用@input是因为close的逻辑会执行两遍,有兴趣的可以自己去尝试,写一个@close打印的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值