【问题标题】:Trigger a button inside a link with Vue使用 Vue 触发链接内的按钮
【发布时间】:2021-03-12 11:06:44
【问题描述】:

我有一组图像,其中包含一些作者等信息,现在我添加了一些按钮以允许用户喜欢图像。

由于图像具有指向图像屏幕的链接,我不知道如何触发按钮以避免触发链接。

这是代码,我使用的是 Vuetify 和 Nuxt:

<nuxt-link
  :to="
    `/photo/${slotProps.item.id}/${
      slotProps.item.slug
    }`
  "
>
  <v-hover>
    <v-img
      slot-scope="{ hover }"
      :src="slotProps.item.url"
    >
      <v-fade-transition mode="in-out">
        <div
          v-if="hover"
          class="d-flex transition-fast-in-fast-out photo-overlay pa-2"
        >
          <div
            class="d-flex pl-1 credits justify-space-between align-center w-100"
          >
            <div>
              <nuxt-link
                :to="
                  `/user/${slotProps.item.pId}`
                "
                class="secondary--text body-2 d-inline-block"
              >
                <v-avatar size="30">
                  <img
                    :src="slotProps.item.avatar"
                    :alt="`${slotProps.item.name}`"
                  />
                </v-avatar>
                <span class="ml-2">
                  {{ slotProps.item.name }}
                </span>
              </nuxt-link>
            </div>
            <div>
              <v-menu
                v-model="addToGalleriesMenu"
                :close-on-content-click="false"
                :nudge-width="200"
              >
                <template v-slot:activator="{ on, attrs }">
                  <v-btn v-on="on" v-bind="attrs" icon color="secondary">
                    <v-icon small>
                      fal fa-hearth
                    </v-icon>
                  </v-btn>
                </template>
                <v-card outlined>
                  <v-card-title>Test</v-card-title>
                </v-card>
              </v-menu>
            </div>
          </div>
        </div>
      </v-fade-transition>
    </v-img>
  </v-hover>
</nuxt-link>

上面的代码生成一张图片,鼠标悬停在底部会出现一个图层,显示名称和一个按钮来点赞图片。

单击用户链接可以正常工作,正如预期的那样。单击应该触发操作的按钮不起作用,因为单击了图像链接。

我该如何解决?

【问题讨论】:

    标签: javascript vue.js nuxt.js vuetify.js


    【解决方案1】:

    您可以使用 Vue 点击修饰符非常轻松地停止事件传播到父元素:

    <a href="example.com">
      ...  
      <v-btn @click.stop.prevent="test()">
       ...
    

    不使用 Vue 修饰符也可以达到同样的效果:

    <a href="example.com">
      ...  
      <v-btn @click="test($event)">
       ...
    
    methods: {
      test (event) {
        event.preventDefault()
        event.stopPropagation()
      }
    }
    

    【讨论】:

    • 感谢您的提问,但是当我没有@click 处理程序时,如何处理 v-on="on" 我应该将 stopPropagation 放在哪里?谢谢
    • @AyeyeBrazo 尝试添加空属性:&lt;v-btn v-on="on" @click.stop.prevent=""&gt;
    • 感谢您的 sn-p,我终于找到了解决方案!干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多