搜尋

首頁  >  問答  >  主體

javascript - vue如何根據設定監聽的事件類型?

Vue.component('button-counter', {
  template: '<button v-on:click="increment()">{{ counter }}</button>',
  data: function () {
    return {
      counter: 0
    }
  },
  methods: {
    increment: function () {
      this.counter += 1
    }
  },
})

例如上面的元件,我希望 v-on監聽的事件是 父元件傳遞過來的,而不是在這裡寫死為click,我該怎麼寫?

我當然知道使用props傳遞,我想知道v-on後面該怎麼寫。如果直接寫propname的話vue會認為要監聽的事件是propname,而不是具體的事件。

仅有的幸福仅有的幸福2764 天前621

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-06-12 09:34:45

    題主的需求比較特殊,如果是這樣的話可能只能用render代替template了:

    <p id="app">
      <button-counter :event="'click'">abc</button-counter>
    </p>
    const counter = Vue.component('button-counter', {
      render(createElement) {
        return createElement(
          'button', {
            on: {
              [this.event]: this.increment,
            },
          },
          `${this.counter}`,
        )
      },
      data() {
        return {
          counter: 0,
        }
      },
      props: {
        event: String
      },
      methods: {
        increment() {
          this.counter += 1
        },
      },
    })
    
    new Vue({
      el: '#app',
      components: {
        'button-counter': counter,
      },
    })

    回覆
    0
  • 黄舟

    黄舟2017-06-12 09:34:45

    父元件傳參給字元件都是透過props的,props可以是function,所以你可以傳一個function給字元件

    回覆
    0
  • 取消回覆