I use Vue.js 2 and I have this array, obtained from this API call (https://developers.themoviedb.org/3/genres/get-movie-list this one) that I’ve used to make a select
in HTML:
"genres": [ { "id": 28, "name": "Azione" }, { "id": 12, "name": "Avventura" }, { "id": 16, "name": "Animazione" }, { "id": 35, "name": "Commedia" }, { "id": 80, "name": "Crime" }, { "id": 99, "name": "Documentario" }, { "id": 18, "name": "Dramma" }, { "id": 10751, "name": "Famiglia" }, { "id": 14, "name": "Fantasy" }, { "id": 36, "name": "Storia" }, { "id": 27, "name": "Horror" }, { "id": 10402, "name": "Musica" }, { "id": 9648, "name": "Mistero" }, { "id": 10749, "name": "Romance" }, { "id": 878, "name": "Fantascienza" }, { "id": 10770, "name": "televisione film" }, { "id": 53, "name": "Thriller" }, { "id": 10752, "name": "Guerra" }, { "id": 37, "name": "Western" } ] }
What I want is to link the v-model
, which is declared in Js as an empty string, to the property id
of this array. I can’t extract the property and use an array with only it, because options’ name is a v-for
that prints genres.name
At the point I am now when I do the console.log
on the v-model
it returns an empty string, means that v-model
doesn’t take any value.
The select is this:
<label for="title">Title</label> <select id="title" name="title" @change="filterAlbums(selectedGenre)" v-model="selectedGenre"> <option value="">All</option> <option v-for="genre in genresName" value="">{{genre.name}}</option> </select>
In data the v-model variable is declared this way:
selectedGenre: '',
I check the v-model
status here in this function
filterAlbums(selectedGenre) { console.log(selectedGenre); }
Advertisement
Answer
Do you mean that this array is a list of elements to be options in a select? If yes, you need to bind every option value (previously generated in a loop by v-for) with the element id:
<select v-model="someValueWithInitialEmptyString"> <option v-for="element in genres" :key="element.id" :value="element.id"> {{element.name}} </option> </select>