Search code examples
javascriptvue.jsbootstrap-4vuejs2dropdown

Set first value in dropdown as default value in VueJs


I want to make the first value of time Object as a default value for my dropdown. Whenever user enter the website, the first value has been selected as my default value. However, my current code only display the value but not selected yet on vue data. How can I do that?

time Object:-

{ "1290_1320":"21:30 - 22:00",
  "1320_1350":"22:00 - 22:30",
  "1350_1380":"22:30 - 23:00"
}

Dropdown HTML:-

<div class="form-group col-md-8">
   <select id="pickup" class="form-control" @change.prevent="changeTime($event)">
      <option selected="selected" v-for="(time, i) in this.timeslots" :key="i" 
       :value="time">{{time}}</option>
   </select>
</div>

Vue:-

export default {
  data() {
    return {
      selectedTime: null
    }
  },
  methods: {
     changeTime(event) {
       this.selectedTime = event.target.options[event.target.options.selectedIndex].text;
  }

Dropdown javascript:-

// remove "selected" from any options that might already be selected
$('#pickup option[selected="selected"]').each(
    function() {
        $(this).removeAttr('selected');
    }
);

// mark the first option as selected
$("#pickup option:first").attr('selected','selected');

Solution

  • It depends on your particular usecase but generally you can do something like this:

    <div class="form-group col-md-8">
       <select id="pickup" v-model="selectedTime" class="form-control">
          <option v-for="(timeValue, timeID) in timeslots" :key="timeID" :value="timeID">{{ timeValue }}</option>
       </select>
    </div>
    
    <script>
    import axios from 'axios';
    
    export default
    {
      name: 'MyDropDown',
      data() 
      {
        return {
          selectedTime: null,
          timeSlots: {},
        }
      },
      created()
      {
        this.fetchData();
      },
      methods: 
      {
        fetchData()
        {
          axios.get('/api/getTimeSlots').then(response =>
          {
            this.timeSlots = response.data;
            this.selectedTime = Object.keys(response.data)[0];
          });
        },
      }
    }