VueJS, при добавлении option сбивается selected по умолчанию. Как убрать этот эффект?

Когда вы добавляете новый вариант в элемент select во Vue.js, значение по умолчанию для выбранного варианта может сбиваться. Это происходит из-за того, что Vue.js обновляет DOM-элементы на основе своего состояния, а не на основе атрибутов HTML. Существует несколько способов решить эту проблему.

1. Vue.js предлагает директиву v-model, которая обеспечивает двустороннюю привязку данных между свойством модели и элементом input. Чтобы сохранить выбранное значение варианта при добавлении нового варианта, вам нужно создать свойство модели и привязать его с помощью директивы v-model. Таким образом, при добавлении нового варианта, значение по умолчанию не будет сбито:

<template>
  <div>
    <select v-model="selectedValue">
      <option v-for="option in options" :value="option.value">{{ option.label }}</option>
    </select>

    <button @click="addOption">Add Option</button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        options: [
          { value: 'option1', label: 'Option 1' },
          { value: 'option2', label: 'Option 2' },
        ],
        selectedValue: 'option1',
      };
    },
    methods: {
      addOption() {
        this.options.push({ value: 'option3', label: 'Option 3' });
      },
    },
  };
</script>

2. Другой способ решить эту проблему - использовать атрибут selected вместо v-model. В этом случае вы должны будете вручную обновлять состояние свойства модели, когда будет добавляться новый вариант:

<template>
  <div>
    <select>
      <option v-for="option in options" :value="option.value" :selected="selectedValue === option.value">{{ option.label }}</option>
    </select>

    <button @click="addOption">Add Option</button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        options: [
          { value: 'option1', label: 'Option 1' },
          { value: 'option2', label: 'Option 2' },
        ],
        selectedValue: 'option1',
      };
    },
    methods: {
      addOption() {
        this.options.push({ value: 'option3', label: 'Option 3' });
        this.selectedValue = 'option3';
      },
    },
  };
</script>

Оба эти способа позволят вам сохранить выбранное значение варианта при добавлении нового варианта в элемент select во Vue.js. Вы можете выбрать способ, который лучше соответствует вашим потребностям и предпочтениям.