看看本页的示例,将 toUpper 应用于所有标题项的方法是什么?必须一一执行(即 header.calories、header.fat...),这看起来太笨拙了,而且我无法弄清楚 v-for 如何包裹 template/v-slot 元素。是使用“div”并水平弯曲它的唯一方法吗?
<template>
<v-data-table
:headers="headers"
:items="desserts"
class="elevation-1"
>
<template v-slot:header.name="{ header }">
{{ header.text.toUpperCase() }}
</template>
</v-data-table>
</template>
<script>
export default {
data: () => ({
headers: [
{
text: 'Dessert (100g serving)',
align: 'start',
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%',
},
....// rest of it
],
}),
}
</script>
Run Code Online (Sandbox Code Playgroud)
最简单的事情就是在组件上使用自定义 CSS。在该<style>
部分中添加:
<style>
.v-data-table-header th {
text-transform: uppercase;
}
</style>
Run Code Online (Sandbox Code Playgroud)
但是,如果您需要对标题进行更广泛的自定义,您可以像这样替换整个标题行:
<v-data-table
:headers="headers"
hide-default-header
>
<template #header="{ props: { headers } }">
<thead class="v-data-table-header">
<tr>
<th
v-for="header in headers"
:key="header.value"
class="text-uppercase"
scope="col"
>
{{ header.text }}
</th>
</tr>
</thead>
</template>
</v-data-table>
Run Code Online (Sandbox Code Playgroud)
但是,我不鼓励这样做,因为您将失去 Vuetify 提供的内置排序功能。也就是说,您可以使用它来添加一个额外的标题行,该标题行将出现在默认标题行之前。只需保留组件hide-default-header
上的属性v-data-table
,您将获得两个标题行,其中一个包含 Vuetify 的所有默认功能,另一个包含您自己设计的自定义功能。
可以循环标题以使所有大写
这是工作代码笔:https://codepen.io/chansv/pen/gOaRWQb ?editors=1010
<div id="app">
<v-app id="inspire">
<v-data-table
:headers="headers"
:items="desserts"
class="elevation-1"
hide-default-header
>
<template v-slot:header="{ props }">
<th v-for="head in props.headers">{{ head.text.toUpperCase() }}
</template>
</v-data-table>
</v-app>
</div>
new Vue({
el: '#app',
vuetify: new Vuetify(),
data: () => ({
headers: [
{
text: 'Dessert (100g serving)',
align: 'start',
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%',
},
{
name: 'Cupcake',
calories: 305,
fat: 3.7,
carbs: 67,
protein: 4.3,
iron: '8%',
},
{
name: 'Gingerbread',
calories: 356,
fat: 16.0,
carbs: 49,
protein: 3.9,
iron: '16%',
},
{
name: 'Jelly bean',
calories: 375,
fat: 0.0,
carbs: 94,
protein: 0.0,
iron: '0%',
},
{
name: 'Lollipop',
calories: 392,
fat: 0.2,
carbs: 98,
protein: 0,
iron: '2%',
},
{
name: 'Honeycomb',
calories: 408,
fat: 3.2,
carbs: 87,
protein: 6.5,
iron: '45%',
},
{
name: 'Donut',
calories: 452,
fat: 25.0,
carbs: 51,
protein: 4.9,
iron: '22%',
},
{
name: 'KitKat',
calories: 518,
fat: 26.0,
carbs: 65,
protein: 7,
iron: '6%',
},
],
}),
})
Run Code Online (Sandbox Code Playgroud)
您的代码是正确的,但在这种形式中,您需要单独添加每个标头,如下所示:
<template>
<v-data-table
:headers="headers"
:items="desserts"
class="elevation-1"
>
<template v-slot:header.name="{ header }">
{{ header.text.toUpperCase() }}
</template>
<template v-slot:header.calories="{ header }">
{{ header.text.toUpperCase() }}
</template>
...
</v-data-table>
</template>
<script>
export default {
data: () => ({
headers: [
{
text: 'Dessert (100g serving)',
align: 'start',
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%',
},
....// rest of it
],
}),
}
</script>
Run Code Online (Sandbox Code Playgroud)
这样,您需要单独对每个标头执行此操作,方法是添加v-slot:header.<value from headers array in the data>
例子:
headers = [
{
text: "text1",
...
value: "category"
}
]
Run Code Online (Sandbox Code Playgroud)
代码将是:
<template v-slot:header.category="{ header }">
{{ header.text.toUpperCase() }}
</template>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21165 次 |
最近记录: |