VueJS jQuery: 父数据属性的计算值未定义

VueJS jQuery: computed value of parent data attribute undefined

当用户单击 <td>.

时,我试图从父 <tr> 中提取 data-reportid 属性

HTML

<tr :data-reportid="modifiedRows[index]['id']" v-for="(row,index) in modifiedRows" :key="index">
  <td v-html="value" v-for="(value, ind) in row" @click="modalRequest(index, ind, value, rowReportID)" :key="ind">
    {{ row[ind] }}    <---- i know i can just use 'value', i was experimenting.
  </td>
</tr>

VueJS - 计算

rowReportID() {
  return $(this).parent().data('reportid');
},

当用户单击时,控制台报告 'undefined' 作为结果。 DOM 正确呈现 data-reportid 属性并且它包含正确的值,因此这不是一个因素。

我在这里错过了什么?请耐心等待。主要是 PHP 背景。

计算 属性 每个 Vue 实例只能有一个缓存值。在这种情况下,您似乎是在尝试根据当前元素计算一个值。计算的 属性 没有那个上下文。

一般来说,计算的 属性 不应尝试访问 DOM。 DOM 不是反应式的,不会触发 属性 更新。此外,DOM 在 属性 首次计算时可能不存在。

我相信在这种情况下,具体问题是 this 将是 Vue 实例,而不是 DOM 元素,因此 $(this) 不会匹配任何内容。您可以尝试在 rowReportID 中添加一些控制台日志记录以确认。

您可以使用方法来代替计算 属性。要访问 DOM 节点,您需要从本机浏览器事件对象中获取它,Vue 将其公开为 $event:

@click="modalRequest(index, ind, value, rowReportID($event))"

与:

methods: {
  rowReportID(event) {
    return $(event.target).parent().data('reportid');
  }
}

这里真的没有必要使用 jQuery,您可以使用本机 DOM API 轻松实现。 jQuery 使用 Vue 时通常不需要。

此外,除非有充分的理由从 DOM 中获取此属性,否则您应该完全避免该阶段。相反,您可以这样做:

@click="modalRequest(index, ind, value, modifiedRows[index].id)"