v-for를 사용하는 요소에서 v-if를 사용하지 않는 방법
다음과 같은 문자 그대로의 오브젝트가 있습니다.
export default {
pizze:{
type:"pizze",
typeOne:{
title: "Pizze Rosse",
data:[
{id:1,type:"pizza",name:"Margherita",price:4,ingredients:["pomodoro","mozzarella"],quantity:0,inventory:100},
{id:2,type:"pizza",name:"Marinara",price:3.5,ingredients:["aglio","pomodoro"],quantity:0,inventory:100},
{id:3,type:"pizza",name:"Salsiccia e funghi",price:6,ingredients:["salsiccia","funghi","mozzarella","pomodoro"],quantity:0,inventory:100},
{id:4,type:"pizza",name:"Carciofi",price:4,ingredients:["mozzarella","carciofi","pomodoro"],quantity:0,inventory:100},
]
},
typeTwo:{
title:"Pizze Bianche",
data:[
{id:5,type:"pizza",name:"Gorgonzola e noci",price:5.50,ingredients:["gorgonzola","noci","mozzarella"],quantity:0,inventory:100},
{id:6,type:"pizza",name:"Stracchino e rucola",price:4.50,ingredients:["stracchino","rucola","basilico"],quantity:0,inventory:100},
{id:7,type:"pizza",name:"Tartufo e salsiccia",price:8,ingredients:["tartufo","salsiccia","mozzarella"],quantity:0,inventory:100},
{id:8,type:"pizza",name:"Zucchine e Gamberi",price:5,ingredients:["zucchine","gamberi","pomodorini"],quantity:0,inventory:100},
]
}
},
primiPiatti:{
type:"primiPiatti",
typeOne:{
title: "Primi di carne",
data:[
{id:12,type:"primiPiatti",name:"Lasagne alla Bolognese",price:9,quantity:0,inventory:100},
{id:13,type:"primiPiatti",name:"Spaghetti alla carbonara",price:14,quantity:0,inventory:100},
{id:14,type:"primiPiatti",name:"pennette all'amatriciana",price:10,quantity:0,inventory:100},
{id:15,type:"primiPiatti",name:"paccheri salsiccia e funghi",price:12,quantity:0,inventory:100},
]
},
typeTwo:{
title:"Primi di pesce",
data:[
{id:16,type:"primiPiatti",name:"spaghetti allo scoglio",price:8.50,quantity:0,inventory:100},
{id:17,type:"primiPiatti",name:"zuppa di cozze",price:14.50,quantity:0,inventory:100},
{id:18,type:"primiPiatti",name:"pappardelle asparagi e gamberi",price:18,quantity:0,inventory:100},
{id:19,type:"primiPiatti",name:"lasagne al salmone",price:15,quantity:0,inventory:100},
]
},
...
v-for 루프 내에서 v-if를 사용하는 것이 잘못된 것인지 몰랐으며, 코드를 보기에 표시하는 첫 번째 방법은 다음과 같습니다.
<div class="menu__container">
<div v-if="menuVoice!=='type'"class="menu__container--box" v-for="menuVoice in Object.keys(menuData)" :key="menuVoice">
<div class="title">{{menuData[menuVoice].title}}</div>
<item-record v-for="data in menuData[menuVoice].data" :key="data.id" :data="data"></item-record>
</div>
</div>
제가 하려고 했던 것은 div block을 표시하는 것을 피하려는 것입니다.type
물체의 특성MenuVoice
다른 목적으로 필요하기 때문에(예를 들어 올바른 오브젝트 취득).그래서 코드를 다음과 같이 리팩터링했습니다.
<div class="menu__container">
<div :style="[menuVoice === 'type' ? {display:'none'} : {display:'block'}]" class="menu__container--box" v-for="menuVoice in Object.keys(menuData)" :key="menuVoice">
<div class="title">{{menuData[menuVoice].title}}</div>
<item-record v-for="data in menuData[menuVoice].data" :key="data.id" :data="data"></item-record>
</div>
</div>
거기에는 항상 if 문장이 있기 때문에 나는 그것이 괜찮은지 잘 모르겠다.어느 경우든 코드는 유효하지만, 더 좋은 방법이 없을까 생각하고 있습니다.
나도 이렇게 아이디브에 v-if를 내려보려고 했어
<div class="menu__container">
<div"class="menu__container--box" v-for="menuVoice in Object.keys(menuData)" :key="menuVoice">
<div v-if="menuVoice !=='type'>
<div class="title">{{menuData[menuVoice].title}}</div>
<item-record v-for="data in menuData[menuVoice].data" :key="data.id" :data="data"></item-record>
</div>
</div>
</div>
그래도 수업시간에 3개의 Div를 받을 수 있기 때문에 안 된다.'.menu__container--box'
.
사용을 피하는 요령v-if
와 함께v-for
계산된 속성으로 데이터 세트를 필터링하는 것입니다.
여기서 나는 이름을 가진 계산기를 만들었다.menuList
어떤 필터가menuData
필터링된 얕은 클론을 반환합니다.
computed: {
menuList() {
return Object.keys(this.menuData)
.filter(key => key !== 'type')
.reduce((res, key) => (res[key] = this.menuData[key], res), {});
}
}
따라서 템플릿은 즉시 사용할 수 있는 적절한 목록을 사용합니다. v-for="(item, key) in menuList"
<div class="menu__container">
<div class="menu__container--box" v-for="(item, key) in menuList" :key="key">
<div class="title">{{item.title}}</div>
<item-record v-for="data in item.data"
:key="data.id" :data="data"></item-record>
</div>
</div>
템플릿 로직은 최소한으로 유지해야 합니다.값 또는 단순한 할당에 대한 참조 이상의 모든 항목은 계산 및 메서드로 이동해야 합니다.
이 작업은 피해야 합니다.
<div class="menu__container">
<div v-if="menuVoice !== 'type'"class="menu__container--box" v-for="menuVoice in Object.keys(menuData)" :key="menuVoice">
<div class="title">{{menuData[menuVoice].title}}</div>
<item-record v-for="data in menuData[menuVoice].data" :key="data.id" :data="data"></item-record>
</div>
</div>
이미 실행한 작업을 사용하여 위의 코드가 실행되지 않도록 할 수 있습니다.
<div class="menu__container">
<div :style="[menuVoice === 'type' ? {display:'none'} : {display:'block'}]" class="menu__container--box" v-for="menuVoice in Object.keys(menuData)" :key="menuVoice">
<div class="title">{{menuData[menuVoice].title}}</div>
<item-record v-for="data in menuData[menuVoice].data" :key="data.id" :data="data"></item-record>
</div>
</div>
언급URL : https://stackoverflow.com/questions/49707180/how-to-avoid-v-if-on-an-element-which-uses-v-for
'programing' 카테고리의 다른 글
Null Pointer 회피Java 예외 (0) | 2022.07.24 |
---|---|
Typescript를 사용하여 Vue3 스토어 액세스 (0) | 2022.07.24 |
Javascript 클래스 오브젝트를 Vuex 상태에서 사용해도 될까요? (0) | 2022.07.23 |
인라인 함수 vs 프리프로세서 매크로 (0) | 2022.07.23 |
Vuetify에서 v-list의 배경색과 크기를 어떻게 스타일링합니까? (0) | 2022.07.23 |