vue js组件挂载时如何给按钮绑定点击事件?

How to bind a click event to a button when component is mounted vue js?

我正在使用第三方应用程序 (vue slick carousel),我需要将点击事件绑定到下面的按钮

<button type="button" data-role="none" class="slick-arrow slick-next" style="display: block;">
    <svg...</svg>
</button>

所以每次我点击这个按钮都会触发一个函数。这是我在 mountedcreated 生命周期中尝试过的,但没有绑定点击事件。

// console.log(document.querySelector(".slick-next")); // this returns element stated above

document.querySelector(".slick-next").addEventListener("click", () => {
  console.log("Works");
});

我试过 setAttribute 希望它有用,但也没用。

感谢任何帮助。提前谢谢你。

必须使用vuejs的events handling。 Vuejs 有很多针对多种情况的事件。

例如,在您的情况下,您可以使用事件 v-bind:click 或简单地使用 @click。在 vue slick 的文档中,显示此示例,本质上是相同的。

我附上一段代码:

<template>
  <VueSlickCarousel ref="carousel">
    <div><h3>1</h3></div>
    /*...*/
  </VueSlickCarousel>
  <button @click="showNext">show me the next</button>
</template>
<script>
  export default {
    methods: {
      showNext() {
        this.$refs.carousel.next()
      },
    },
  }
</script>

我怀疑他们当时可能在组件内部的按钮点击上使用了 stopPropagation。

根据您的需要,可能还有其他解决方法:

<VueSlickCarousel @beforeChange="checkChange">
    ...
</VueSlickCarousel>

methods: {
    checkChange(oldSlideIndex, newSlideIndex) {
        if (newSlideIndex > oldSlideIndex) {
            console.log("Next button clicked");
        }
    }
}

另一种选择可能是使用 Carousel 标签内的 <template #nextArrow="{ currentSlide, slideCount }"></template> 插槽并使用您自己的按钮。如果你走这条路,你可能必须实现自己的逻辑来设置下一张幻灯片。