vue.js
[Vue] 기초 응용 key-value 객체
망고고래
2025. 2. 18. 11:07
1) 데이터
export default{
data(){
keyValueData:{
A: valueA
B: valueB
C: valueC
}
}
}
2) select의 option 생성: v-for
<template>
<select>
<option v-for="valueD in keyValueData" :key="valueD" :value="valueD">{{ valueD }}</option>
</select>
</template>
① v-for="value in keyValueData"
- keyValueData라는 객체/배열의 각 항목을 순회하면서 반복
- 각 반복에서 현재 항목을 value라는 변수로 참조(for문의 i)
② :key="valueD"
- Vue의 가상 DOM 업데이트를 위한 고유 키 설정
- 각 option 요소를 구별하는 데 사용
- ':'는 v-bind와 같음(단축 문법)
③ :value="valueD"
- option의 value 속성을 valueD 값으로 바인딩
- 실제 select에서 선택했을 때 이 값이 v-model로 바인딩됨
④ {{ valueD }}
- option 태그 사이의 텍스트로 role 값을 표시
- 사용자에게 보여지는 텍스트
2-1) option의 value를 객체의 key 또는 value로 지정
v-for로 객체를 순회할 때 다음과 같은 문법을 사용할 수 있다.
v-for="(value, key) in object"
v-for="(value, key, index) in object"
<template>
<select>
<option v-for="(key, value) in keyValueData" :key="key" :value="key">{{ value }}</option>
</select>
</template>
3) key값을 자동으로 value 값으로 변환해서 출력
서버에서 받아 오는 데이터에 key값이 들어있고, 이를 매칭되는 value로 출력함
* 데이터가 페이징을 위해 pagenatedData로 가공되어있는 상황
<tbody>
<tr v=for"data1 in pagenatedData" :key="data1.username">
<td>{{ data1.username }}</td>
<td>{{ data1.phonenumber }}</td>
<td>{{ data1.roles.map(role => keyValueData[role] || role).join(', ') }}</td>
</tr>
<tbody>
① v-for="data1 in pagenatedData" :key="data1.username"
- pagenatedData를 data1이라는 변수로 반복
- key는 data1의 username 값
② data1.roles.map(role => keyValueData[role] || role).join(', ')
- data1의 roles를 map을 사용해 반환
ex) roles가 ["A, B"]인 경우
map 매서드는 콜백 함수를 인자로 받아 함수의 반환값으로 새로운 배열을 만듦
* 현재 콜백 함수: role => keyValueData[role] || role
1. role 변수로 keyValueData에서 해당하는 value를 찾아 오고, 값이 없을 경우 role을 그대로 출력
2. 배열 값이 여러 개인 경우 ', ' 문자를 넣어 문자열로 출력
→최종 출력값: valueA, valueB
함수를 풀어서 쓴 코드
//<td>{{ data1.roles.map(role => keyValueData[role] || role).join(', ') }}</td>
roles.map(function(role){
const matchedValue = keyValueData[role] || role
return matchedValue
}).join(', ')