Работает ли что-то подобное или я неправильно понимаю ваш вопрос?Это выводит выбранные элементы (как объекты) обратно на страницу против console.log(...)
.
Зеркало CodePen
Редактировать: (отвечаяваш вопрос ниже) ~~ Slot Props ~~: (не путать с «именованными слотами») по сути позволяет вам брать свойства у дочернего компонента и использовать их для рендеринга в родительском. Вы можете узнать больше о слотах с ограниченным пространством (также известных как «реквизиты слотов») здесь
Возьмите следующий блок кода, например:
<template v-slot:item='data'>
<v-list-tile-content>
<v-list-tile-title>
{{ data.item.firstName }} {{ data.item.lastName }}
</v-list-tile-title>
</v-list-tile-content>
</template>
v-slot:item='data'
-вместо данных можно использовать любое имя, которое вы хотите: v-slot:item="theItems"
также будет работать (примечание: тогда вы будете использовать {{ theItems.item.firstName }}...
Причина, по которой вы должны использовать data.ITEM.x
(имеется в виду ITEM
)потому что это то, что Vuetify называет scoped slot
для v-select
- , подробнее об этом можно прочитать здесь .. Надеюсь, это поможет!
new Vue({
el: "#app",
props: {
value: {
type: [String, Object]
}
},
data() {
return {
chosenItems: [],
items: [{
firstName: "John",
lastName: "Smith",
Age: 44
},
{
firstName: "Sarah",
lastName: "Martin",
Age: 32
},
{
firstName: "Derick",
lastName: "Johnson",
Age: 39
},
{
firstName: "Mary",
lastName: "Spitzer",
Age: 22
},
{
firstName: "Wendy",
lastName: "Macdonald",
Age: 57
},
]
};
},
computed: {
selectedItems: {
get() {
return this.value;
},
set(item) {
// Could either emit (so you can use v-model on the parent)
// or add to array
this.chosenItems.push(item)
this.$emit("input", item);
}
}
}
});
<link href="https://cdn.jsdelivr.net/npm/vuetify@1.5.6/dist/vuetify.min.css" rel="stylesheet" />
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@1.5.6/dist/vuetify.min.js"></script>
<div id="app">
<v-app>
<v-content>
<v-container>
<v-layout row>
<v-flex>
<v-select
v-model='selectedItems'
label='Select One Or Many'
:items="items"
item-text="firstName"
chips
clearable
multiple
return-object
>
<template v-slot:selection='data'>
<v-chip
:key="JSON.stringify(data.item)"
close
class="chip--select-multi"
@input="data.parent.selectItem(data.item)"
>
{{ data.item.firstName }} {{ data.item.lastName }}
</v-chip>
</template>
<template v-slot:item='data'>
<v-list-tile-content>
<v-list-tile-title>
{{ data.item.firstName }} {{ data.item.lastName }}
</v-list-tile-title>
</v-list-tile-content>
</template>
</v-select>
</v-flex>
</v-layout>
<div class="mt-5">
<v-layout>
<v-flex>
<h3>Chosen Items Will Be Displayed Here:</h3>
</v-flex>
</v-layout>
<div v-for="(chosen, index) in chosenItems">
<hr/>
<div v-for="(eachChosen, i) in chosen">
{{ eachChosen }}
</div>
<hr/><br/>
</div>
</div>
</v-container>
</v-content>
</v-app>
</div>