I'm trying to do filtering on groups in a vue app. Is it possible to group v-model with a nested array?
I've tried with the below template...
<div id="app">
<div class="filter__control filter__control--tags">
<div class="filter__label">Colour</div>
<div class="filter__list">
<label><input type="checkbox" v-model="selectedTags[0]" value="Harvest">Harvest</label>
<label><input type="checkbox" v-model="selectedTags[0]" value="Moss">Moss</label>
<label><input type="checkbox" v-model="selectedTags[0]" value="Navy">Navy</label>
<label><input type="checkbox" v-model="selectedTags[0]" value="White">White</label>
</div>
</div>
<div class="filter__control filter__control--tags">
<div class="filter__label">Size</div>
<div class="filter__list">
<label><input type="checkbox" v-model="selectedTags[1]" value="L">L</label>
<label><input type="checkbox" v-model="selectedTags[1]" value="M">M</label>
<label><input type="checkbox" v-model="selectedTags[1]" value="S">S</label>
<label><input type="checkbox" v-model="selectedTags[1]" value="XL">XL</label>
<label><input type="checkbox" v-model="selectedTags[1]" value="XS">XS</label>
</div>
</div>
</div>
And vue instance..
var app = new Vue({
el: '#app',
data: {
selectedTags: []
},
watch: {
selectedTags: function() {
// I expect the array to look something like...
this.selectedTags = [
["Navy"],
["XS", "S"]
]
}
}
});
There is no need for the watcher. Just assign them to 2 different parameters of your SelectedTags object.
var app = new Vue({ el: '#app', data: { selectedTags: { color: [], size: [], } }, // if you need exact format of the tags that you wanted use computed property. computed: { SelectedTagsArrays: function(){ return [this.selectedTags.color, this.selectedTags.size]; } } });
<div id="app"> <div class="filter__control filter__control--tags"> <div class="filter__label">Colour</div> <div class="filter__list"> <label><input type="checkbox" v-model="selectedTags.color" value="Harvest">Harvest</label> <label><input type="checkbox" v-model="selectedTags.color" value="Moss">Moss</label> <label><input type="checkbox" v-model="selectedTags.color" value="Navy">Navy</label> <label><input type="checkbox" v-model="selectedTags.color" value="White">White</label> </div> </div> <div class="filter__control filter__control--tags"> <div class="filter__label">Size</div> <div class="filter__list"> <label><input type="checkbox" v-model="selectedTags.size" value="L">L</label> <label><input type="checkbox" v-model="selectedTags.size" value="M">M</label> <label><input type="checkbox" v-model="selectedTags.size" value="S">S</label> <label><input type="checkbox" v-model="selectedTags.size" value="XL">XL</label> <label><input type="checkbox" v-model="selectedTags.size" value="XS">XS</label> </div> </div> </div>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.