#vue.js #vuejs2 #vue-component
Вопрос:
У меня есть родительский компонент, использующий MyGrid
компонент и заполняющий данные. Внутри MyGrid
я проверяю item
тип , и если это определенный тип, я даю ему класс typeSquare
.
В интересах сохранения MyGrid
«тупости», есть ли способ проверить тип, а затем MyGrid
передать опору для класса?
Родитель
<MyGrid
:items="items"
columnGap="12"
rowGap="14"
>
<template v-slot="slotProps">
<Cover
v-if="slotProps.typename === 'NewOne'"
:project="slotProps.item.data"
/>
<Cover2 v-else-if="slotProps.typename != 'NewOne'" :project="slotProps.item.data"/>
</template>
</MyGrid>
myGrid.vue
<template>
<div :class="$style.root">
<div :class="$style.gridContainer">
<template v-for="(item, index) in items">
<div
:key="index"
:class="[{ [$style.gridItem]: true }, { [$style.typeSquare]: item.typename === 'NewOne' }]"
:style="{
padding: `${columnGap}px ${rowGap}px`,
}"
>
<slot :item="item"></slot>
</div>
</template>
</div>
</div>
</template>
Комментарии:
1. Итак, вы хотите передавать только объекты определенного типа из этого списка «предметов»?
Ответ №1:
Если ваша цель состоит в том, чтобы передавать только элементы, соответствующие определенным критериям, вы можете отфильтровать их с помощью вычисляемых свойств. В свой скрипт добавьте вычисляемый объект следующим образом
computed:{
filteredItems(){
return this.items.filter(item=>item.typename === 'NewOne')
}
},
А после в вашем шаблоне вы можете передать вычисленное свойство вместо всего списка
<MyGrid
:items="filteredItems"
columnGap="12"
rowGap="14"
>