옵션이 개체 배열인 경우 vue-다중 선택 옵션을 미리 선택하는 방법
다음에 의해 생성된 선택 드롭다운에서 특정 값을 미리 선택하려는 경우vue-multiselect
.
다음과 같은 간단한 문자열 배열만 있으면 이 기능이 제대로 작동하도록 할 수 있다.
['Test 1', 'Test 2', 'Test 3']
하지만 여러 가지 물건을 사용할 때, 나는 이것을 작동시킬 수 없다.예를 들어 다음과 같은 경우:
<v-multiselect :options="[{id: 1, name: 'Test 1'}, {id: 2, name: 'Test 2'}, {id: 3, name: 'Test 3'}]"
label="name"
track-by="id"
v-model="test">
</v-multiselect>
내가 무엇을 설정하든test
v-model이 연결되어 있는 데이터 속성은 값을 미리 선택하지 않는다.노력했다1
,2
,3
,'1'
,'2'
그리고'3'
을 위해test
할 때track-by
이다id
그리고'Test 1'
, 등(는) 다음과 같은 경우)track-by
이다name
하지만 아무 것도 효과가 없는 것 같다.
내가 여기서 뭘 잘못하고 있는 거지?https://vue-multiselect.js.org/#sub-sub-single-select-object에서 문서를 살펴보았지만, 옵션의 객체 배열 값을 미리 설정하려는 경우에는 예를 제공하지 않는 것 같다.구글링도 내가 찾고 있는 것을 돌려주지 않았다.
관련 항목에서 이 작업을 수행하면 구성 요소를 다음으로 설정할 때 여러 값을 선택하려면 무엇을 변경해야 하는가?multiple
고마워
track-by
사용법
문서에는 다음과 같은 내용이 표시된다.track-by
"물체를 비교하는 데 사용된다. 옵션이 개체인 경우에만 사용하십시오."
즉, 에서 개체 값을 비교할 때 사용할 개체 키를 지정한다.options
문서들은 실제로 다음과 같이 진술해야 한다.track-by
다음과 같은 이유로 옵션이 개체인 경우 필요함<vue-multiselect>
사용하다track-by
드롭다운에서 선택한 옵션을 결정하고 다중 선택 항목에서 선택한 옵션을 적절하게 제거하십시오.
없는track-by
에서는 개체 구성을 위한 두 가지 버기 동작을 볼 수 있다. (1) 사용자는 이미 선택된 옵션을 다시 선택할 수 있으며, (2) 선택한 옵션을 제거하려고 하면 대신 모든 옵션이 다시 선택된다.
초기 값 설정
<vue-multiselect>
값 배열 자동 변환은 지원하지 않지만 상위 구성 요소에서 쉽게 변환할 수 있다.
지정할 로컬 데이터 속성 생성
track-by
초기 다중 선택 값(예: 이름 지정)trackBy
그리고initialValues
각각 ,:export default { data() { return { //... trackBy: 'id', initialValues: [2, 5], } } }
묶다
<vue-multiselect>.track-by
로this.trackBy
그리고<vue-multiselect>.v-model
로this.value
:<vue-multiselect :track-by="trackBy" v-model="value">
감시자 만들기
this.initialValues
이 값을 다음 기준에 따라 개체 배열로 매핑할 수 있는this.trackBy
설정this.value
그 결과:export default { watch: { initialValues: { immediate: true, handler(values) { this.value = this.options.filter(x => values.includes(x[this.trackBy])); } } } }
Vue.component('v-multiselect', window.VueMultiselect.default);
new Vue({
el: '#app',
data () {
return {
trackBy: 'id',
initialValues: [5,2],
value: null,
options: [
{ id: 1, name: 'Vue.js', language: 'JavaScript' },
{ id: 2, name: 'Rails', language: 'Ruby' },
{ id: 3, name: 'Sinatra', language: 'Ruby' },
{ id: 4, name: 'Laravel', language: 'PHP' },
{ id: 5, name: 'Phoenix', language: 'Elixir' }
]
}
},
watch: {
initialValues: {
immediate: true,
handler(values) {
this.value = this.options.filter(x => values.includes(x[this.trackBy]));
}
}
}
})
<script src="https://unpkg.com/vue@2.6.6/dist/vue.min.js"></script>
<script src="https://unpkg.com/vue-multiselect@2.1.0"></script>
<link rel="stylesheet" href="https://unpkg.com/vue-multiselect@2.1.0/dist/vue-multiselect.min.css">
<div id="app">
<v-multiselect :track-by="trackBy"
:options="options"
v-model="value"
label="name"
multiple>
</v-multiselect>
<pre>{{ value }}</pre>
</div>
벌레 같은데?해결 방법은 에 대한 실제 참조를 사용하는 것이다.object
Vue.component('v-multiselect', window.VueMultiselect.default);
let testOptions=[{id: 1, name: 'Test 1'}, {id: 2, name: 'Test 2'}, {id: 3, name: 'Test 3'}]
new Vue({
el: '#app',
data: function () {
return {
test: testOptions[1], // <- use an object ref here!
testOptions
};
}
});
내가 알아낸 가장 쉬운 방법은 BE에서 모든 물체를 보내는 것이고, 그래서 그것은 미리 선택된다.BE에서 동일한 객체를 보내면 사전 선택된다.하지만 네 선택사항이 FE에서 하드코드로 되어 있는지 아니면 데이터베이스 같은 것에서 온 것인지 모르겠다.나는 같은 문제가 있었지만 나의 가치관은 데이터베이스에서 나왔기 때문에 그 대상을 쉽게 재현할 수 있었다.
'Programing' 카테고리의 다른 글
Java에서 사용자 지정 예외 유형을 생성하는 방법 (0) | 2022.05.16 |
---|---|
Thread.current를 호출하는 이유캐치 인터럽트Exception 블록의 스레드.인터럽트()? (0) | 2022.05.16 |
외부와 콘스탄트 혼합 (0) | 2022.05.16 |
공리 호출에 성공한 후 Vue.js 구성 요소가 상위 구성 요소로 방출되지 않음 (0) | 2022.05.15 |
선행 0으로 Java 문자열을 포맷하는 방법 (0) | 2022.05.15 |