在做項目過程中,需求是點擊孔位單擊彈出對話框查看產品總數,雙擊彈出對話框查看詳情。一開始直接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>