点击事件无法在Vuetify徽章上正常工作

3
我们最近开始使用Vue和Vuetify。作为应用程序的一部分,我需要在Vuetify徽章上编写点击操作,但不确定为什么它没有起作用。我尝试了以下代码片段:
<v-badge bottom
               left
               overlap
               :color="red">
        <div slot="badge"
             @click="togglePopover"
             class="availability"></div>
        <Avatar :objData="data.image"
                :size="size"
                :applyBoarder="applyBoarder">
          <slot></slot>
        </Avatar>
      </v-badge>

<script>
  export default {
    methods: {
    togglePopover(e) {
      alert('click action');
    }
  }
</script>
4个回答

3
你应该在click事件上使用native修饰符。
@click.native="togglePopover"

以下是来自VueJS文档的内容

.native - 在组件的根元素上监听原生事件。

要了解更多信息以及所有可用的修饰符,请点击这里:https://v2.vuejs.org/v2/api/#v-on


这个可以运行,但也会使徽章槽可点击,在大多数情况下并不理想。 - Sølve T.

1

不必使用 div 来作为徽章插槽,你可以使用 v-btn

<v-badge>
  <v-btn slot="badge" @click="togglePopover">
    <v-icon>done</v-icon>
  </v-btn>
</v-badge>

new Vue({
  el: '#app',
  methods: {
    togglePopover() {
      console.log('click');
    }
  }
})
@import url(https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons);
@import url(https://cdn.jsdelivr.net/npm/vuetify@1.2.6/dist/vuetify.min.css);

#app {
  padding-top: 20px;
}
<script src="https://unpkg.com/vue@2.5.17"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@1.2.6/dist/vuetify.min.js"></script>

<div id="app">
  <v-app id="inspire">
    <div class="text-xs-center">
      <v-badge
        color="purple"
        left
        overlap
      >
        <v-btn slot="badge"
               flat
               icon
               dark
               small
               :ripple="false"
               @click="togglePopover">
          <v-icon>done</v-icon>
        </v-btn>
        <v-icon
          color="grey lighten-1"
          large
        >
          account_circle
        </v-icon>
      </v-badge>
    </div>
  </v-app>
</div>


1

对我来说,@tony19的答案没有起作用,除非添加z-index

<v-badge
    bordered
    color="red"
    overlap
>
    <v-icon slot="badge" style="z-index: 1;" @click="doSomething">
        mdi-close
    </v-icon>
    <v-img
        class="rounded-lg"
        height="100"
        width="100"
        aspect-ratio="1"
        src="https://placekitten.com/g/300/300"
    />
</v-badge>

0
我发现徽章附着的物品在被点击时可以正常工作,但是徽章本身却不能。这是我的解决方法:添加一个 div 来显示内容插槽,除了将物品包裹在徽章中。
此示例使用数据值 count 作为徽章的内容。
      <v-badge>
        <!-- WORKAROUND badge is not clickable -->
        <template #badge>
          <div
              style="cursor: pointer"
              @click="$emit('show-settings')">
            {{ String(count) }}
          </div>
        </template>
        <v-btn icon @click="$emit('show-settings')">
          <v-icon>settings</v-icon>
        </v-btn>
      </v-badge>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接