Vuetify v数据表未完全加载数据:空白行

时间:2019-08-08 00:48:29

标签: vue.js datatable vuejs2 vuetify.js

Vue版本:2.6.10

Vuetify版本:1.5

我正在使用Vuetify 1.5.16文档的示例数据:https://v15.vuetifyjs.com/en/components/data-tables

该表显示正确,我可以使用道具编辑它的外观。问题在于数据未完全加载。表中的行数与数组中的对象数完全相同,但所有行均为空白(td标签为空白)。

启用道具“加载”后,它一直都是正确的(我一直都能看到进度线过渡效果)。

{% extends 'base.html' %}
{% block title %}Page name{% endblock %}

{% block custom_style %}

<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@1.5/dist/vuetify.min.css" rel="stylesheet">

<!-- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, minimal-ui"> -->
{% endblock %}


{% block content %} 
<v-app id="app-name">
        <template>
            <v-data-table dark loading no-data-text :headers="headers" :items="desserts"
                class="elevation-1">
                <template v-slot:items="props">
                    <td> {{ props.item.name }}</td>
                    <td class="text-xs-right">{{ props.item.calories }}</td>
                    <td class="text-xs-right">{{ props.item.fat }}</td>
                    <td class="text-xs-right">{{ props.item.carbs }}</td>
                    <td class="text-xs-right">{{ props.item.protein }}</td>
                    <td class="text-xs-right">{{ props.item.iron }}</td>
                </template>
            </v-data-table>
        </template>
    </div>
</v-app>
{% endblock %}
{% block custom_js_back %}


<!-- development version, includes helpful console warnings -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@1.5/dist/vuetify.js"></script>


<script>

    var vueData = new Vue({
        delimiters: ["<%", "%>"],
        el: '#app-name',
        data: {
            // example data
            headers: [
                {
                    text: 'Dessert (100g serving)',
                    align: 'left',
                    sortable: false,
                    value: 'name',
                },
                { text: 'Calories', value: 'calories' },
                { text: 'Fat (g)', value: 'fat' },
                { text: 'Carbs (g)', value: 'carbs' },
                { text: 'Protein (g)', value: 'protein' },
                { text: 'Iron (%)', value: 'iron' },
            ],
            desserts: [
                {
                    name: 'Frozen Yogurt',
                    calories: 159,
                    fat: 6.0,
                    carbs: 24,
                    protein: 4.0,
                    iron: '1%',
                },
                {
                    name: 'Ice cream sandwich',
                    calories: 237,
                    fat: 9.0,
                    carbs: 37,
                    protein: 4.3,
                    iron: '1%',
                },
                {
                    name: 'Eclair',
                    calories: 262,
                    fat: 16.0,
                    carbs: 23,
                    protein: 6.0,
                    iron: '7%',
                },
            ],
        },
    });

</script>
{% endblock custom_js_back %}

Django可能与此无关。

The v-data-table component has all data but it is not shown in table

1 个答案:

答案 0 :(得分:0)

您正在定义自定义delimiters,因此请使用它们代替默认的["{{", "}}"]

关于loading道具一直都是正确的,这是因为当您执行以下操作时:

<v-data-table loading>
</v-data-table>

没有v-bind,实际上是将标志永久设置为true(无数据绑定)。相反,您最可能希望做的是v-bind:loading="loading"(或更短的:loading="loading"),其中类似名称的值(loading)是将状态绑定到您的{{ 1}}对象。

从此处,您可以在获取数据(通过axios或其他方式)时说“开始加载”,等等,将状态切换为data

道具true也是如此-如果您不需要数据绑定,则可以像使用任何HTML属性一样简单地将自定义文本置于行内。例如

no-data-text

<v-data-table no-data-text="No data to display">
var vueData = new Vue({
  delimiters: ["<%", "%>"],
  el: '#app-name',
  data:() => ({
    // example data
    headers: [
      {
        text: 'Dessert (100g serving)',
        align: 'left',
        sortable: false,
        value: 'name'
      },
      { text: 'Calories', value: 'calories' },
      { text: 'Fat (g)', value: 'fat' },
      { text: 'Carbs (g)', value: 'carbs' },
      { text: 'Protein (g)', value: 'protein' },
      { text: 'Iron (%)', value: 'iron' }
    ],
    desserts: [
      {
        name: 'Frozen Yogurt',
        calories: 159,
        fat: 6.0,
        carbs: 24,
        protein: 4.0,
        iron: '1%',
      },
      {
        name: 'Ice cream sandwich',
        calories: 237,
        fat: 9.0,
        carbs: 37,
        protein: 4.3,
        iron: '1%',
      },
      {
        name: 'Eclair',
        calories: 262,
        fat: 16.0,
        carbs: 23,
        protein: 6.0,
        iron: '7%',
      }
    ],
    
    loading: false
  })
});