扩展 Vue.js v-on:click 指令

Extend Vue.js v-on:click directive

我是 的新手。我正在尝试创建我的第一个应用程序。我想在每次点击按钮时显示一条确认消息。

示例:

<button class="btn btn-danger" v-on:click="reject(proposal)">reject</button>

我的问题是:我可以扩展 v-on:click 事件以在所有地方显示确认吗?我会创建名为 v-confirm-click 的自定义指令,它首先执行确认,然后,如果我单击 "ok",则执行单击事件。可能吗?

我会推荐一个组件。 Vue 中的指令一般用于直接 DOM 操作。在您认为需要指令的大多数情况下,组件更好。

这里是一个确认按钮组件的例子。

Vue.component("confirm-button",{
  props:["onConfirm", "confirmText"],
  template:`<button @click="onClick"><slot></slot></button>`,
  methods:{
    onClick(){
      if (confirm(this.confirmText))
        this.onConfirm()
    }
  }

})

你可以这样使用:

<confirm-button :on-confirm="confirm" confirm-text="Are you sure?">
  Confirm
</confirm-button>

这是一个例子。

console.clear()

Vue.component("confirm-button", {
  props: ["onConfirm", "confirmText"],
  template: `<button @click="onClick"><slot></slot></button>`,
  methods: {
    onClick() {
      if (confirm(this.confirmText))
        this.onConfirm()
    }
  }

})

new Vue({
  el: "#app",
  methods: {
    confirm() {
      alert("Confirmed!")
    }
  }
})
<script src="https://unpkg.com/vue@2.2.6/dist/vue.js"></script>
<div id="app">
  <confirm-button :on-confirm="confirm" confirm-text="Are you sure?">
    Confirm
  </confirm-button>
</div>

我不知道扩展指令的方法。在点击处理程序中包含 confirm 调用非常容易。它不会将每次点击都转换为确认点击,但编写新指令也不会;无论哪种情况,您都必须更新所有代码才能使用新表单。

new Vue({
  el: '#app',
  methods: {
    reject(p) {
      alert("Rejected " + p);
    }
  }
});
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script>
<div id="app">
  <button class="btn btn-danger" @click="confirm('some message') && reject('some arg')">reject</button>
</div>