javascript - 将事件绑定(bind)到多个对象

标签 javascript vue.js vuejs2

我试图将相同的行为附加到几个不同的元素,但无法弄清楚如何实现。

根据下面的代码片段,如果您单击按钮,两个按钮的事件将同时触发。我想知道是否可以仅针对单击的按钮触发事件,而无需为 button1showInside1 等创建方法。

var App = new Vue({
  el: '#app',
  data() {
    return {
        showInside: false
    }
  },
  methods:{
    show: function () {
        this.showInside = true 
    },
    hide: function () { 
        console.log('hide')
        this.showInside = false
    }
  },
  events: {
    closeEvent: function () {
      console.log('close event called')
      this.hide()
    }
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <button @click.stop="show">1 Click me</button>
  <div v-if="showInside">
    <p>This is box 1</p>  
    <button @click="hide">Close</button>
  </div>


  <button @click.stop="show">2 Click me</button>
  <div v-if="showInside">
    <p>This is box 2</p>  
    <button @click="hide">Close</button>
  </div>
</div>

最佳答案

考虑将通用代码移至 componentslots减少重复代码并隔离数据属性:

Vue.component('my-section', {
  template: `
    <div class="my-section">
      <button @click.stop="showInside = true">Click me</button>
      <div v-if="showInside">
        <slot></slot>
        <button @click="showInside = false">Close</button>
      </div>
    </div>`,
  data() {
    return {
        showInside: false
    }
  },
  methods:{
    show: function () {
        this.showInside = true 
    },
    hide: function () { 
        console.log('hide')
        this.showInside = false
    }
  },
  events: {
    closeEvent: function () {
      console.log('close event called')
      this.hide()
    }
  }
})

var App = new Vue({
  el: '#app',
})
.my-section {
  margin: 1em;
  padding: 0.5em;
  border: solid 1px #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <my-section>
    <p>This is box 1</p>
  </my-section>
  <my-section>
    <p>This is box 2</p>
  </my-section>
</div>

关于javascript - 将事件绑定(bind)到多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66328143/

相关文章:

javascript - 如何根据是否存在另一个 CSS 类组合来更改 CSS 类?

javascript - 如何从 react native 中的 json 数据中删除 html 标签?

javascript - 如何将选定的值呈现到多下拉框中

javascript - 将样式应用于特定的 v-for 元素

javascript - vuejs无法在导航栏中获取vuex值

javascript - 外部 div 内容进入内部 div

javascript - 如何测试数组项的文本是否包含子字符串?

vue.js - 将 parent Prop 传递给 Vue,js 中的插槽

javascript - Vue.js 路由器不显示正确的子路由

vue.js - 在 Vuejs 的数据中使用计算属性