vue给同一元素绑定单击click和双击事件dblclick,执行不同逻辑

在做项目过程中,需求是点击孔位单击弹出对话框查看产品总数,双击弹出对话框查看详情。一开始直接click和dblclick写在标签里面,但是不管怎么样,总是执行单击事件

解决办法:利用计时器,在大概时间模拟双击事件

html部分代码:

<div class="grid-content">
    <el-button v-for="(item,index) in items" :key="index" 
         @click="storageCount(item.id)" 
         @dblclick.native="storageDetail(item.id)" 
         class="inline-cell" 
         :class="colors[item.status]">
         {{item.id}}
    </el-button>
</div>

.native主要用于监听组件根元素的原生事件,主要是给自定义的组件添加原生事件。

官方对.native修饰符的解释为:有时候,你可能想在某个组件的根元素上监听一个原生事件。可以使用 v-on 的修饰符 .native 

<script>
import desDialog from './dialog';
import detailDialog from './detailDialog';var time = null;  //  在这里定义time 为null 
export default {
  name: 'storeTable',
  components: {
    desDialog,
    detailDialog
  },
  props: ['providerid'],
  data() {
    return {
      colors: ['space', 'isBuy'],
      showDialog: false,
      showDialogT: false
    };
  },
  methods: {  // 单击事件函数
    storageCount(id) {
      clearTimeout(time);  //首先清除计时器
      time = setTimeout(() => {
        this.showDialog = !this.showDialog;  
        const obj = {};
        obj.cutname = id;
        obj.providerid = this.providerid;
        this.$store.dispatch('GetStorageCount', obj);
      }, 300);   //大概时间300ms
    },  // 双击事件函数,清除计时器,直接处理逻辑
    storageDetail(id) {
      clearTimeout(time);  //清除
      this.showDialogT = !this.showDialogT;
      const obj = {};
      obj.cutname = id;
      obj.providerid = this.providerid;
      this.$store.dispatch('GetStorageDetail', obj);
    },
    close() {
      this.showDialog = false;
    },
    closeT() {
      this.showDialogT = false;
    }
  }
};
</script>

本资源由随笔博客发布。发布者:五维国度,转载请注明出处:http://blog.suibi.site/archives/4409


本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

(0)
上一篇 2023年 6月 1日 上午9:25
下一篇 2023年 6月 21日 上午9:57

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

在线咨询: QQ交谈

邮件:jctestxcx@163.com

关注微信