#javascript #html #css #vue.js #drop-down-menu
#javascript #HTML #css #vue.js #выпадающее меню
Вопрос:
Если я удаляю background-green
привязку или value
привязку класса из select
элемента, он работает как обычный выпадающий список. Но, допустим, я не удалил background-green
привязку класса, затем после выбора выбранный параметр не отображается, но если я снова выберу тот же выбранный параметр или другой параметр, он будет отображаться. То же самое поведение с value
привязкой. Итак, почему он работает во второй раз? Это моя настоящая проблема / путаница.
Вот ссылка на запущенный пример с примером кода.
Ответ №1:
Проблема заключается в том :value="defaultValue"
, что она фактически не меняется (потому defaultValue
что никогда не меняется), а также в побочном эффекте повторного запуска, который происходит в первый раз.
Поскольку :value
, по сути, всегда ""
, каждый раз <select>
, когда повторно отображается, Vue присваивает значение этой пустой строке.
Вы handleInput
установили fillBg = true
, который запускает повторный рендеринг, потому background-green
что его не было в первоначальном рендере. Это означает, что Vue сбросит значение <select>
back на defaultValue
(пустой)
В то время, когда кажется, что он работает после первого выбора, на самом деле происходит локальное состояние DOM, показывающее, что вы выбрали. Поскольку в vdom нет изменений (зеленый фон уже есть), Vue не выполняет повторный рендеринг и, следовательно, не сбрасывает значение.
Правильный способ исправить это — либо обновить defaultValue
(возможно, переименовать это) во время события ввода, либо использовать v-model
. Суть в том, чтобы Vue устанавливал правильное значение при каждом рендеринге.
handleInput(e) {
this.fillBg = true;
this.defaultValue = e.target.value;
},