【问题标题】:click action not working on vuetify badge单击操作不适用于 vuetify 徽章
【发布时间】:2018-10-02 18:50:57
【问题描述】:

我们最近开始使用 Vue 和 Vuetify。作为应用程序的一部分,我需要在 Vuetify 徽章上编写点击操作,但不确定为什么它不起作用。我尝试了以下代码sn-p:

<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>

【问题讨论】:

    标签: vue.js vuejs2 vuetify.js


    【解决方案1】:

    您应该在click 事件上使用native 修饰符。

    @click.native="togglePopover"
    

    来自 VueJS 文档

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

    有关更多信息和所有可用修饰符,请单击此处:https://vuejs.org/v2/api/#v-on

    【讨论】:

    • 这可行,但也会使徽章槽可点击,在大多数情况下并不理想。
    【解决方案2】:

    您可以使用v-btn 代替div 作为徽章槽:

    <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>

    【讨论】:

      【解决方案3】:

      对我来说,@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>
      

      【讨论】:

        【解决方案4】:

        我发现徽章附加到的项目在单击时有效,但徽章本身无效。这是我的解决方法:除了包含在徽章中的项目之外,还添加一个 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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-03
          • 2020-09-29
          • 1970-01-01
          • 2018-02-28
          • 1970-01-01
          • 1970-01-01
          • 2017-08-28
          • 2021-09-27
          相关资源
          最近更新 更多