vue.js - 使用嵌套数据和 v-slot :item Vuetify 数据表

标签 vue.js vuejs2 vuetify.js

我想创建一个包含嵌套数据的 Vuetify 表。问题是 v-slot:item 似乎不适用于嵌套数据。

这是我的代码:https://codepen.io/blakex/pen/XWKWjaE

<v-data-table :headers="headers" :items="desserts">
  <template v-slot:item.calories="{ item }">
    <td>Slot works: {{ item.calories }}</td>
  </template>
  <template v-slot:item.nested.nestedCalories="{ item }">
    <td>Nested slot works: {{ item.nested.nestedCalories }}</td>
  </template>
</v-data-table>

data () {
  return {
    headers: [
      { text: 'Dessert', value: 'name' },
      { text: 'Calories', value: 'calories' },
      { text: 'Nested Calories', value: 'nested.nestedCalories' },
    ],
    desserts: [
      {
        name: 'Yogurt',
        calories: 100,
        nested: { nestedCalories: 100 },
      },
      ...
    ],
  }
}

如您所见,v-slot:item.nested.nestedCalories 不起作用。

data table

有谁知道少了什么?

最佳答案

DOM Template Parsing Caveats 中似乎没有提到这一点, 但 HTML 标签和属性不区分大小写。在 Codepen 中,您使用 DOM 作为模板,所以 v-slot:item.nested.nestedCalories属性变为小写 ( v-slot:item.nested.nestedcalories )。如果更改 headers 中的值小写你会发现它有效。

为避免这种情况,您应该始终在 Vue 中使用字符串模板。字符串模板可以是:

您使用 x-template 编写的代码如下所示:

<div id="app"></div>

<script type="text/x-template" id="app-template">
  <v-app>
    <v-data-table
      :headers="headers"
      :items="desserts"
      :items-per-page="5"
      class="elevation-1"
    >
      <template v-slot:item.calories="{ item }">
        <td>Slot works: {{ item.calories }}</td>
      </template>
      <template v-slot:item.nested.nestedCalories="{ item }">
        <td>Nested slot works: {{ item.nested.nestedCalories }}</td>
      </template>
    </v-data-table>
  </v-app>
</script>

<script>
  const App = {
    template: '#app-template',
    data: () => ({
      headers: [
        { text: 'Dessert', value: 'name' },
        { text: 'Calories', value: 'calories' },
        { text: 'Nested Calories', value: 'nested.nestedCalories' },
      ],
      desserts: [
        {
          name: 'Yogurt',
          calories: 100,
          nested: { nestedCalories: 100 },
        },
        {
          name: 'Ice cream',
          calories: 200,
          nested: { nestedCalories: 200 },
        },
        {
          name: 'Eclair',
          calories: 300,
          nested: { nestedCalories: 300 },
        },
      ],
    })
  }


  new Vue({
    vuetify: new Vuetify(),
    render: h => h(App)
  }).$mount('#app')
</script>

关于vue.js - 使用嵌套数据和 v-slot :item Vuetify 数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64241600/

相关文章:

vue.js - Nuxt 生产模式加载资源晚

vue.js - 在 v-for 中验证焦点输入

javascript - 处理程序(鼠标、触摸、滚动)在 Vuejs 单文件组件中的 Mapbox-gl-js map 上不起作用

javascript - 在应用程序加载之前将数据加载到 vuex 存储中,如何完成?

javascript - 将来自 background.js 的数据存储到 vuex 存储中

vue.js - vue.js 2 : Access props in mounted function

css - 如何调整 vuetify 组件中的分隔线宽度?

javascript - CSS 网格 - 计算列数 (javascript)

javascript - 属性更新仅在下一次更新运行中执行

javascript - 我可以使用 vue.js 在选择选项中设置动态工具提示吗?