Чтобы воспользоваться системой реактивности vue
, vue
нуждается в полном контроле.Таким образом, нет никакого способа обойти это, вы должны как-то сообщить vue
об этих значениях по умолчанию.
Если вы html-центричный, то это будет немного неловко: вы должны выбрать dom
элемент, чтобы найти его значение по умолчанию и установить его обратно в vue
.Это бы сработало, но это было бы однотипно.
Правильный путь в vue
состоит в том, чтобы полностью ориентироваться на данные и создавать HTML на основе данных.Например, если ваша форма имеет 2 поля выбора, то, используя способ vue
, вы должны определить данные для всех имеющихся у вас option
и использовать такие данные для создания этих элементов с нуля (обратите внимание, что яиспользуя формат Single File Component
здесь):
<template>
<div>
<Select :items="list1"/>
<Select :items="list2"/>
</div>
</template>
<script>
import Select from './components/Select.vue';
export default {
data() {
return {
list1: [
{ id: 1, name: "spoon" },
{ id: 2, name: "fork", preselect: true },
{ id: 3, name: "knife" }
],
list2: [
{ id: 4, name: "macbook" },
{ id: 5, name: "dell" },
{ id: 6, name: "lenovo", preselect: true }
]
};
},
components: { Select }
};
</script>
И вот код для компонента <Select>
(обратите внимание, что это пользовательский компонент Vue, так как он начинается с заглавной буквы S
),Этот компонент получит опору items
и автоматически вычислит выбранное значение из заданных предметов:
<template>
<select v-model="selected">
<option
v-for="item of items"
:key="item.id"
:value="item.id">
{{ item.name }}
</option>
</select>
</template>
<script>
export default {
props: ["items"],
data() {
return {
// pre-select item from 'items'
selected: this.items.filter(item => item.preselect)[0].id
};
}
};
</script>
После этого элемент fork
и элемент lenovo
будут предварительно выбраныкак диктуют данные.Вы также можете увидеть рабочий пример этого codesandbox .