Vue.js
Vue 셀렉트박스 여러개 구현하기
★개발일기★
2022. 11. 21. 09:47
반응형
Vue 에서는 v-model 이라는 v-on 과 v-bind 가 결합된 형태를 지원한다.
이를 이용해서 셀렉트박스 여러개를 만들어보고자 한다.
아래는 평범한 v-model 로 만든 1개의 셀렉트 박스이다.
<select v-model="partSelectModel" class="admin-table-select">
<option
v-for="(boards, index) in board"
:key="'part' + index"
class="admin-table-option"
:value="board.value"
>
{{ boards.sub }}
</option>
</select>
data() {
return {
partSelectModel: "0",
board: [
{ sub: "선택", value: "0" },
{ sub: "1", value: "1" },
{ sub: "2", value: "2" },
{ sub: "3", value: "3" }
]
}
}
기본 바인딩 된 데이터를 보여줄때는 우리가 흔히 사용했던 html selected 는 v-model 을 사용해서 만든다면 정상 작동하지 않는다.
v-model 에 바인딩 된 값과 option value 값과 동일한 값이 selected 가 되어 보여진다.
그럼 여러개의 셀렉트 박스를 만들고 싶을때는 반복문을 사용해서 만들면 되지 않을까?
결론부터 말하자면 아니다. v-model 은 v-bind 이기 때문에 1개 당 1개의 바인딩만 가능하다.
유니크한 셀렉트 박스 여러개를 만들고 싶다면 v-model 을 여러개 선언해주자.
selected: {
model1: '',
model2: '',
model3: '',
...
}
v-model="selected.model1"
아래의 방향도 가능하지만 추천하지 않는다.
selected: []
v-model = "selected[0]"
배열로 관리 할 수도 있지만, validation 을 할 때 각 변수별로 체크하기 위해 각각 선언되는게 좋기때문이다.
배열로 했을 경우, 0번째를 건너뛰고 1번째를 먼저 선택하게 되면 selected[0] 이 undefined 가 된다.
결국 validation 을 진행할때 selected[0] 에 대해 undefined 을 체크해야 하는 번거러움이 생긴다.
결론은 썩 기분이 좋지는 않다. 셀렉트 박스만큼 v-model 을 만들어줘야 한다는게 코드가 난잡해지는 것 같은 기분이 들기 때문이다.
반응형