You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel+Vuetify数据表格报错:slice非函数及类型不匹配求助

解决v-data-table的TypeError和Invalid Prop错误

这两个错误的根源都是数据类型不匹配加上插槽使用不当,我来一步步帮你解决:

1. 修正初始数据类型,解决Invalid Prop错误

v-data-table的:items属性要求传入数组,但你在data里把lists初始化成了{}(对象),组件一加载就会检测到类型不匹配,抛出Invalid prop错误。

把lists的初始值改成空数组:

data () {
  return {
    lists: [], // 从{}改为[]
    errors:{},
    headers: [
      { text: 'Customer', align: 'left', value: 'Customer' },
      { text: 'Address', value: 'Address' },
      { text: 'Contact No', value: 'CustomerContactNo' },
    ],
  }
}

2. 确保后端返回的是数组,解决slice不是函数错误

TypeError: this.items.slice is not a function是因为slice是数组的方法,当items是对象时就会调用失败。这时候要检查axios请求返回的response.data是不是数组:

  • 在then回调里加个console.log(response.data),看看后端返回的结构。
  • 如果后端返回的是包裹在对象里的数组(比如{ data: [...] }),你需要取数组部分赋值:this.lists = response.data.data。
  • 如果后端直接返回数组,那当前的this.lists = response.data就没问题。

3. 修正插槽使用,避免渲染异常

你的模板里有两个插槽使用问题:

  • 直接把<v-btn>放在v-data-table内,没有指定插槽,应该放到top或bottom插槽里(比如表格顶部)。
  • 用了v-slot:items="lists",但v-data-table的行插槽是item(单数),不是items。正确的做法是用v-slot:item="props"来接收每一行的数据。

修改后的模板:

<v-data-table :headers="headers" :items="lists" class="elevation-1">
  <!-- 把按钮放到top插槽,显示在表格顶部 -->
  <template v-slot:top>
    <v-btn color="success">Success</v-btn>
  </template>
  <!-- 使用item插槽渲染每一行 -->
  <template v-slot:item="props">
    <td class="text-xs-left">{{ props.item.Customer }}</td>
    <td class="text-xs-right">{{ props.item.Address }}</td>
    <td class="justify-center layout px-0">
      <v-icon small class="mr-2" color="teal">visibility</v-icon>
      <v-icon small class="mr-2" color="orange darken-2">edit</v-icon>
      <v-icon small color="red darken-2">delete</v-icon>
    </td>
  </template>
</v-data-table>

做完这三步,你的错误应该就能全部解决了。

内容的提问来源于stack exchange,提问作者Subaru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:04:52