Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Set initial vuetify v-select value

Can someone help me set the default value for a v-select? The caveat is that my v-select is populated with objects, which I think might be the reason why assigning my item-value to my desired initial value isn't working:

<v-select
  item-text="name"
  v-model="defaultSelected"
  :items="people"
>

Vue.use(Vuetify);

const vm = new Vue({
  el: "#app",
  data: {
    defaultSelected: {
      name: "John",
      last: "Doe"
    },
    people: [
      {
        name: "Harry",
        last: "Potter"
      },
      {
        name: "George",
        last: "Bush"
      }
    ]
  }
});

Expected:

The initial v-select should be John

Actual:

The initial v-select is blank. Here's a fiddle for reference:

https://jsfiddle.net/tgpfhn8m/734/

Can someone help? Thanks in advance!

like image 614
John Grayson Avatar asked Jul 18 '18 02:07

John Grayson


People also ask

How can I set selected option selected in Vue JS?

We can get the selected option on change with Vue. js by setting @change to a method. We set v-model to the key reactive property bind the selected value attribute value to key . And we set @change to onChange($event) to call onChange with the change event object.

How do I use Vue select?

We can add vue-select in our component like this. <v-select : options ="fruits" ></ v-select > : This how we add Vue-select in our component, there is v-bind or : in this component, options is props we pass to component vue-select. This is the provision of the vue-select library. Add data locally in our component.


2 Answers

I believe there are two issues with your set up. Firstly, the initial value should be one of the options in select, i.e., you should have people include your defaultSelected; Secondly your object needs to contain a value field, see v-select props. Otherwise you need to specify item-value prop; See a working example here.

<v-select   item-text="name"   item-value="last"   v-model="defaultSelected"   :items="people" >  Vue.use(Vuetify);   const vm = new Vue({   el: "#app",   data: {     defaultSelected: {       name: "John",       last: "Doe"     },     people: [       {         name: "John",         last: "Doe"       },       {         name: "Harry",         last: "Potter"       },       {         name: "George",         last: "Bush"       }     ]   } }); 
like image 167
Psidom Avatar answered Sep 18 '22 19:09

Psidom


Alternative answer for those finding this question from a search...

How to select default value using an attribute of an object

<template>     <v-select v-model="input.user_id" :items="users" item-value="id" item-text="name" label="Users"/>  </template>  <script>   export default {     data: () => ({         input: {             user_id: 2,         },         users: [           {             id: 1,             name: "John",             last: "Doe"           },           {             id: 2,             name: "Harry",             last: "Potter"           },           {             id: 3,             name: "George",             last: "Bush"           }         ]     }),   } </script> 

Fiddle example: https://jsfiddle.net/4c3tbj6m/

Explain usage:

v-model is a special interfacing method for the value attribute of an <input /> field.

item-value="id" tells the input field what attribute of a selected object item row to set as the value of input.user_id

item-text="name" tells the field what attribute of a selected object item row to use to display as the selected text.

See Official Documentation on v-model.

Example above is a select field so v-model is representing value of what would be a selected attribute of an option element like the following:

<option value="1" selected>John</option>

The value of input.user_id is the selected item (value set by the v-model bind)

You can then POST the entirety of input (if more input fields are added) but in this case there is only user_id in there:

 methods: {    save() {      axios.post('/my/api/example', this.input).then(response => {        console.log(response);      })    }  }  
<v-btn @click.prevent="save">SAVE</v-btn> 

This will POST a JSON object to your servers end point /my/api/example formatted like this:

{   "user_id": 1 } 
like image 28
Marc Avatar answered Sep 17 '22 19:09

Marc