有什么方法可以通过 Vue.js 覆盖点击事件
is there any way that i can override the click event through Vue.js
我目前正在使用 Vue-datatable,其中我有一个通用的 vue 组件作为 .我正在使用这个基本组件来呈现数据 table 并且我在元素中有一个 @click 事件。但是当我在不同的地方使用这个组件时,我希望 @click 事件被覆盖,这样我就可以根据需要调用 diffenent 方法。
下面的文件是BaseTable.vue
<v-app id="inspire">
<v-data-table
v-model="selected"
:headers="headers"
:items="desserts"
:pagination.sync="pagination"
select-all
item-key="name"
class="elevation-1"
>
<template v-slot:headers="props">
<tr>
<th>
<v-checkbox
:input-value="props.all"
:indeterminate="props.indeterminate"
primary
hide-details
@click.stop="toggleAll"
></v-checkbox>
</th>
<th
v-for="header in props.headers"
:key="header.text"
:class="['column sortable', pagination.descending ? 'desc' : 'asc', header.value === pagination.sortBy ? 'active' : '']"
@click="changeSort(header.value)"
>
<v-icon small>arrow_upward</v-icon>
{{ header.text }}
</th>
</tr>
</template>
<template v-slot:items="props">
<tr :active="props.selected" @click="props.selected = !props.selected">
<td>
<v-checkbox
:input-value="props.selected"
primary
hide-details
></v-checkbox>
</td>
<td>{{ props.item.name }}</td>
<td class="text-xs-right">{{ props.item.calories }}</td>
<td class="text-xs-right">{{ props.item.fat }}</td>
<td class="text-xs-right">{{ props.item.carbs }}</td>
<td class="text-xs-right">{{ props.item.protein }}</td>
<td class="text-xs-right">{{ props.item.iron }}</td>
</tr>
</template>
</v-data-table>
</v-app>
</template>```
Could I possibly override the triggercall method shown above in the code?
Thanks.
从您的组件触发一个 event
,可以从父组件监听。
假设在你的 DataTable
组件中有 button
触发 click
:
<button @click="$emit('triggerClick')">
Hey trigger when someone clicks me
</button>`
现在你想使用 DataTable
组件,并希望在有人单击 DataTable
内的按钮时执行 method
简单 -
<Your-Component>
<DataTable @triggerClick="yourMethodFoo"/>
</Your-component>
如果你想在组件内部使用 method
并且可以从父级覆盖它。那么这就是您想要的可选行为——就像您想要创建一个全局行为一样。
您需要一个额外的 prop
来告诉您的全局组件您希望方法被父方法覆盖。
props: {
parentHandler: {
type: Boolean,
default: false
}
}
methods: {
triggerClick() {
if (this.parentHandler) {
this.$emit(triggerClick)
return
}
// execute anything bydefault
}
}
<button @click="triggerClick">
Hey trigger when someone clicks me
</button>`
所以默认情况下你会执行你的默认 method
但如果你将 parentHandler= true
传递给组件它将执行父方法
<Your-Component>
<DataTable :parentHandler="true" @triggerClick="yourMethodFoo"/>
</Your-component>
我目前正在使用 Vue-datatable,其中我有一个通用的 vue 组件作为 .我正在使用这个基本组件来呈现数据 table 并且我在元素中有一个 @click 事件。但是当我在不同的地方使用这个组件时,我希望 @click 事件被覆盖,这样我就可以根据需要调用 diffenent 方法。
下面的文件是BaseTable.vue
<v-app id="inspire">
<v-data-table
v-model="selected"
:headers="headers"
:items="desserts"
:pagination.sync="pagination"
select-all
item-key="name"
class="elevation-1"
>
<template v-slot:headers="props">
<tr>
<th>
<v-checkbox
:input-value="props.all"
:indeterminate="props.indeterminate"
primary
hide-details
@click.stop="toggleAll"
></v-checkbox>
</th>
<th
v-for="header in props.headers"
:key="header.text"
:class="['column sortable', pagination.descending ? 'desc' : 'asc', header.value === pagination.sortBy ? 'active' : '']"
@click="changeSort(header.value)"
>
<v-icon small>arrow_upward</v-icon>
{{ header.text }}
</th>
</tr>
</template>
<template v-slot:items="props">
<tr :active="props.selected" @click="props.selected = !props.selected">
<td>
<v-checkbox
:input-value="props.selected"
primary
hide-details
></v-checkbox>
</td>
<td>{{ props.item.name }}</td>
<td class="text-xs-right">{{ props.item.calories }}</td>
<td class="text-xs-right">{{ props.item.fat }}</td>
<td class="text-xs-right">{{ props.item.carbs }}</td>
<td class="text-xs-right">{{ props.item.protein }}</td>
<td class="text-xs-right">{{ props.item.iron }}</td>
</tr>
</template>
</v-data-table>
</v-app>
</template>```
Could I possibly override the triggercall method shown above in the code?
Thanks.
从您的组件触发一个 event
,可以从父组件监听。
假设在你的 DataTable
组件中有 button
触发 click
:
<button @click="$emit('triggerClick')">
Hey trigger when someone clicks me
</button>`
现在你想使用 DataTable
组件,并希望在有人单击 DataTable
method
简单 -
<Your-Component>
<DataTable @triggerClick="yourMethodFoo"/>
</Your-component>
如果你想在组件内部使用 method
并且可以从父级覆盖它。那么这就是您想要的可选行为——就像您想要创建一个全局行为一样。
您需要一个额外的 prop
来告诉您的全局组件您希望方法被父方法覆盖。
props: {
parentHandler: {
type: Boolean,
default: false
}
}
methods: {
triggerClick() {
if (this.parentHandler) {
this.$emit(triggerClick)
return
}
// execute anything bydefault
}
}
<button @click="triggerClick">
Hey trigger when someone clicks me
</button>`
所以默认情况下你会执行你的默认 method
但如果你将 parentHandler= true
传递给组件它将执行父方法
<Your-Component>
<DataTable :parentHandler="true" @triggerClick="yourMethodFoo"/>
</Your-component>