3

我正在循环一个数组,该数组将几个按钮输出到一个表中。我想动态设置单击该按钮时调用的方法。它正确地从数组中拉入所有其他内容,但它没有设置方法(因此单击时按钮什么也不做)

这是我的 v-for 循环代码:

<tr v-for="button in buttons" :key="button.id">
   <td>
      <button @click="button.method">{{button.name}}</button>
   </td>
</tr>

这是Vue组件的数据对象中的代码

 buttons : [
            {id : 1, name : 'Button 1', method : 'buttonOne'},
            {id : 2, name : 'Button 2', method : 'buttonTwo'},
        ],

如果我手动设置调用的方法,那么一切正常。但是每个按钮都调用相同的方法。而不是“buttonOne、buttoneTwo 等”

<button @click="buttonOne">{{button.name}}</button> //This works but each button has the buttonOne method being called on-click
4

2 回答 2

10

不要使用method字段的方法名称,而是指定方法本身:

// method: 'buttonOne'  // DON'T DO THIS
method: this.buttonOne

new Vue({
  el: '#app',
  data() {
    return {
      buttons : [
        {id : 1, name : 'Button 1', method : this.buttonOne},
        {id : 2, name : 'Button 2', method : this.buttonTwo},
      ],
    };
  },
  methods: {
    buttonOne() {
      console.log('buttonOne');
    },
    buttonTwo() {
      console.log('buttonTwo');
    }
  }
})
<script src="https://unpkg.com/vue@2.5.13"></script>

<div id="app">
  <table>
    <tr v-for="button in buttons" :key="button.id">
       <td>
          <button @click="button.method">{{button.name}}</button>
       </td>
    </tr>
  </table>
</div>

于 2018-04-05T21:15:22.447 回答
1

如果@tony19 的回答不够克莱尔,试试这个。

export default {
    name: 'app',
    data() {
        return {
          buttons : [
            {id : 1, name : 'Button 1', method : this.buttonOne},
            {id : 2, name : 'Button 2', method : this.buttonTwo},
          ],
}
}}
于 2021-01-09T22:53:31.660 回答