Я использую vue + vue-material для воспроизведения таблицы.
в документах vue-material я обнаружил, что рендеринг таблицы очень прост из-за «слотов» в vue , найденных здесь в «пользовательском шаблоне» - поэтому я попробовал на упрощенном примере только с именем + возраст 2 человека.
<template>
<md-table v-model="people">
<md-table-row slot="md-table-row" slot-scope="{ item }">
<md-table-cell md-label="name">{{ item.name }}</md-table-cell>
<md-table-cell md-label="age">{{ item.age }}</md-table-cell>
</md-table-row>
</md-table>
</template>
<script>
export default {
name: 'app',
data: () => {
return {
people: [
{name: "Alice", age: 22},
{name: "Bob", age: 21}
]
}
},
}
</script>
доставляет удовольствие. Затем я посмотрел слоты на документах vue и обнаружил, что есть новый синтаксис для слотов с областью действия на vue 2.6 + . Естественно, я хотел попробовать это:
<template>
<md-table v-model="people">
<md-table-row v-slot:md-table-row="{ item }">
<md-table-cell md-label="name">{{ item.name }}</md-table-cell>
<md-table-cell md-label="age">{{ item.age }}</md-table-cell>
</md-table-row>
</md-table>
</template>
Это не отображает таблицу, а также не регистрирует ошибки в консоли javascript.
Я нашел место, где этот слот определен здесь на github vue-material, чтобы убедиться, что все будет настроено в соответствии с документацией vue:
<tbody v-else-if="value.length">
<md-table-row-ghost
v-for="(item, index) in value"
:key="getRowId(item, mdModelId)"
:md-id="getRowId(item, mdModelId)"
:md-index="index"
:md-item="item">
<slot name="md-table-row" :item="item" />
</md-table-row-ghost>
</tbody>
И да, slot name
установлено, и v-bind:item="item"
также там, так что, как я понимаю, это должно работать с новым синтаксисом v-слота.
Я что-то упустил?
EDIT:.
версия 2.6.6
vue материал 1.0.0.бета-10.2
Я попытался настроить простой компонент, определяющий только слот (то же имя, также привязанный к: item), и подключил его с использованием синтаксиса "new" - все заработало.
appSlot:
<template>
<div>
<div v-for="name in names" :key="name">
<slot name="red-scope"
:content="name">
</slot>
</div>
</div>
<template>
, где names
приходит через свойство из AppWrapper:
<template>
<AppSlot :names="names">
<template #red-scope="{ content }">
<p>hi {{content}}</p>
</template>
</AppSlot>
</template>
...
data() => {
return {
names: ["Alice", "Bob"]
}
}
Не имеет большого практического смысла, но он проверяет, что моя установка может обрабатывать новый синтаксис, и он работает