v-select 옵션의 특성을 설정하는 방법
Vue부터 시작하여 베스트 프랙티스에 대한 조언이 필요합니다.
달성하려고 하는 것: 설정makeId
선택한 옵션에 따라 makes option id와 동일합니다.예를 들어 드롭다운에서 "bmw"를 선택하면makeId
2가 됩니다.
Vuetify를 사용하지 않으면 클라우드에서 각 옵션에 데이터 속성을 설정할 수 있습니다.v-for
루프하고 나서@change
그 속성을 잡아서 값을 할당하는 것만으로makeid
.
Vuetify를 사용하여 무엇을 할 수 있습니까?
<v-select v-model="car.make" :items="makes" item-value="name" item-text="name"> </v-select>
data: function() {
return {
car: { make: "", makeId: "" },
makes: [{ name: "audi", id: "1" }, { name: "bmw", id: "2" }]
};
}
갱신:
바인드 할 수 있습니다.id
처럼item-value
및 그 위에v-model
할당해야 합니다.car.madeId
대신car.make
단일 값이 필요한 경우:
<v-select v-model="car.makeId" :items="makes" item-value="id" item-text="name"> </v-select>
또는 오브젝트 바인딩에 다른 메서드를 사용할 수도 있습니다.
여기 그것을 위한 포크가 있다: 코드펜
여기서 가장 어려운 점은 오브젝트에 두 가지 형식이 있다는 것입니다.매핑할 필요가 있다id
/name
그리고.make
/makeId
일을 복잡하게 만들죠
속성 매핑이 없어도 이 작업은 간단합니다.return-object
에서v-select
.
그것이 불가능하다고 가정할 때, 한 가지 대안은 다음과 같습니다.car
속성 이름을 변경할 때 선택한 값을 기준으로 계산된 속성으로 사용됩니다.이것은 다음과 같습니다.
new Vue({
el: '#app',
vuetify: new Vuetify(),
data () {
return {
selectedCar: null,
makes: [{name: 'audi', id: '1'}, {name: 'bmw', id: '2'}]
}
},
computed: {
car () {
const selectedCar = this.selectedCar
if (selectedCar) {
return {
make: selectedCar.name,
makeId: selectedCar.id
}
}
}
}
})
#app {
padding: 10px;
}
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
<link href="https://unpkg.com/mdi@2.2.43/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://unpkg.com/vuetify@2.0.5/dist/vuetify.min.css" rel="stylesheet">
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
<script src="https://unpkg.com/vuetify@2.0.5/dist/vuetify.min.js"></script>
<div id="app">
<v-app>
<p>{{ car }}</p>
<v-select v-model="selectedCar" :items="makes" item-value="name" item-text="name" return-object> </v-select>
</v-app>
</div>
그 대신 두 사람 사이의 관계를 뒤집을 수 있다.car
그리고.selectedCar
하도록car
인data
그리고.selectedCar
는 계산된 속성입니다.그러기 위해서는 getter와 setter를 구현해야 합니다.
new Vue({
el: '#app',
vuetify: new Vuetify(),
data () {
return {
car: {make: '', makeId: ''},
makes: [{name: 'audi', id: '1'}, {name: 'bmw', id: '2'}]
}
},
computed: {
selectedCar: {
get () {
return this.makes.find(make => make.id === this.car.makeId)
},
set (selectedCar) {
this.car = {
make: selectedCar.name,
makeId: selectedCar.id
}
}
}
}
})
#app {
padding: 10px;
}
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
<link href="https://unpkg.com/mdi@2.2.43/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://unpkg.com/vuetify@2.0.5/dist/vuetify.min.css" rel="stylesheet">
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
<script src="https://unpkg.com/vuetify@2.0.5/dist/vuetify.min.js"></script>
<div id="app">
<v-app>
<p>{{ car }}</p>
<v-select v-model="selectedCar" :items="makes" item-value="name" item-text="name" return-object> </v-select>
</v-app>
</div>
세 번째 대안은 도랑을 치는 것이다.v-model
다 같이 쓰고 그냥...:value
/@input
직접 페어링:
new Vue({
el: '#app',
vuetify: new Vuetify(),
data () {
return {
car: {make: '', makeId: ''},
makes: [{name: 'audi', id: '1'}, {name: 'bmw', id: '2'}]
}
},
methods: {
onInput (id) {
const make = this.makes.find(make => make.id === id)
this.car = {
make: make.name,
makeId: make.id
}
}
}
})
#app {
padding: 10px;
}
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
<link href="https://unpkg.com/mdi@2.2.43/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://unpkg.com/vuetify@2.0.5/dist/vuetify.min.css" rel="stylesheet">
<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
<script src="https://unpkg.com/vuetify@2.0.5/dist/vuetify.min.js"></script>
<div id="app">
<v-app>
<p>{{ car }}</p>
<v-select :value="car.makeId" :items="makes" item-value="id" item-text="name" @input="onInput"> </v-select>
</v-app>
</div>
언급URL : https://stackoverflow.com/questions/57445033/how-to-set-an-attribute-on-a-v-select-option
'programing' 카테고리의 다른 글
목록의 항목을 단일 문자열에 연결하려면 어떻게 해야 합니까? (0) | 2022.10.01 |
---|---|
두 개 이상의 필드를 조합하여 검증하려면 어떻게 해야 합니까? (0) | 2022.10.01 |
MySQL/MariaDB는 COUNT(*)를 방정식에 포함시킵니다. (0) | 2022.10.01 |
로거가 프라이빗 스태틱이어야 하는지 여부 (0) | 2022.10.01 |
JavaScript에서 함수 호출에 명명된 파라미터를 제공하는 방법이 있습니까? (0) | 2022.10.01 |