在做项目过程中,需求是点击孔位单击弹出对话框查看产品总数,双击弹出对话框查看详情。一开始直接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
js部分代码
<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>