javascript - Vue.js - onclick 事件不触发

标签 javascript vue.js

我有一个 vue-cli 项目。

在其中,我有一个 vue 组件 myList.vue,它有以下按钮:

<a class='button' v-on:click='changeRecord'>Aendern</a>

以下是页面的屏幕截图,其中检查器位于此类元素上: /image/HN5SD.jpg

changeRecord 事件处理程序是此组件内的自定义方法。 代码如下所示:

export default {

  data () {
    return {
      tableContent: ""
    }
  },
  methods: {
    //...
    //some other code before
    //...
    changeRecord: function(event){
      console.log("clickevent fired!")
    }
  }

}

现在,为什么当我左键单击该元素时事件没有触发?我需要做哪些不同的事情?

编辑: 标记是动态生成的(至少与带有按钮的列表相关的部分)。以下是生成标记的方法:

fetchList: function(){
      var test = store.dispatch(USER_FETCHLIST).then((res) => {
        let tableData = res["data"]
        console.log("all tabledata ",tableData)
        var contents = ""
        var contentsHead = ""
        var contentsBody = ""

        contentsHead = this.createTableHead(tableData[0]) //Only first element is needed here!
        contents = contents + contentsHead + "<tbody>"
        contentsBody = this.createTableBody(tableData)
        contents = contents + contentsBody + "</tbody>"
        this.tableContent = contents;
      })
    },
    createTableHead: function(tableHeadData){
      console.log("all tableHeadData ",tableHeadData)
      var tableHead = "<thead><tr>"
        for (const [keyOuter, valueOuter] of Object.entries(tableHeadData)){
          if(typeof valueOuter !== 'object'){
            tableHead = tableHead + `<td>${keyOuter}</td>`
          }else if(typeof valueOuter === 'object' && valueOuter !== null){
            for (const [keyInner, valueInner] of Object.entries(valueOuter)){
              tableHead = tableHead + `<td>${keyInner}</td>`
            }
          }
        }
      //tableHead = tableHead + ""
      tableHead = tableHead + "<td>Aktion</td></tr></thead>"

      return tableHead
    },
    createTableBody: function(tableData){
      var tableBody = ""
      tableData.forEach((entry) => {
        tableBody = tableBody + "<tr>"
        for (const [keyOuter, valueOuter] of Object.entries(entry)){
          if(typeof valueOuter !== 'object'){
            tableBody = tableBody + `<td name='${keyOuter}'>${valueOuter}</td>`
          }else if(typeof valueOuter === 'object' && valueOuter !== null){
            for (const [keyInner, valueInner] of Object.entries(valueOuter)){
                tableBody = tableBody + `<td name='${keyInner}'>${valueInner}</td>`
            }
          }
        }
        tableBody =  tableBody + "<td><a class='button' v-on:click='changeRecord'>Aendern</a></td>" + "</tr>"

      })

      return tableBody
    }

编辑2: 这是我动态生成标记的数据: 我从控制台截取了它,因为我认为由于突出显示和其他内容,这种方式更具可读性: /image/90ipF.jpg

最佳答案

使用 v-for 的解决方案如下所示:

  <table>
<thead>
  <tr>
    <td>Internal_Key</td>
    <td>description</td>
    <td>description_sysops</td>
    <td>aktion</td>
  </tr>
</thead>
<tbody>
  <tr v-for="table in tabledata" :key="table.Internal_key">
    <td>{{ table.Internal_key }}</td>
    <td>{{ table[Object.getOwnPropertyNames(table)[1]][Object.getOwnPropertyNames(table[Object.getOwnPropertyNames(table)[1]])[0]] }}</td>
    <td>{{ table[Object.getOwnPropertyNames(table)[2]][Object.getOwnPropertyNames(table[Object.getOwnPropertyNames(table)[2]])[0]] }}</td>
    <td>
      <a class="button" @click="changeRecord">Aendern</a>
    </td>
  </tr>
</tbody>

和代码:

export default {
data() {
  return {
    tabledata: []
  };
},
methods: {
  changeRecord: function(event) {
    console.log("clickevent fired!");
  }
},
created() {
  this.$store.dispatch(USER_FETCHLIST).then(res => {

    this.tabledata = res.data;

  });
}
};

关于javascript - Vue.js - onclick 事件不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60702724/

相关文章:

javascript - 获取组中选中的单选按钮的值时出现问题?

javascript - 在 AngularJs 中将值从提供者传递到 Controller

vue.js - 使用按钮 | 展开和折叠 TreeView 维特化

javascript - Vue.js - 将类添加到单击的按钮

javascript - 如何设置基于 Prop 的动画过渡?

javascript - 在固定 block 中按比例调整图像大小

javascript - 在插入符号位置插入 HTML 而不创建对象

javascript - jquery 和 js 混合使用时遇到问题

javascript - Vue.js 不会使用 v-for 重新渲染组件

javascript - (VUEX + JEST) 函数响应未定义