select vue.js 的意外下拉行为
Unexpected select dropdown behaviour with vue.js
如果我从 select
元素中删除 background-green
class 绑定或 value
绑定,那么它会像普通下拉菜单一样工作。但是假设我没有删除 background-green
class 绑定,那么在 selecting 之后,selected 选项不会显示,但是如果我再次 select相同的 selected 选项或其他选项将显示。 value
绑定的行为相同。那么为什么它第二次工作呢?这是我真实的concern/confusion.
这是 运行 示例的 link 示例代码。
问题是 :value="defaultValue"
实际上没有改变(因为 defaultValue
永远不会改变)和第一次发生重新渲染的副作用。
因为 :value
基本上总是 ""
,任何时候 <select>
是 re-rendered,Vue 将值设置为那个空字符串。
您已 handleInput
设置 fillBg = true
触发 re-render,因为 background-green
不在初始渲染中。这意味着 Vue 会将 <select>
的值重置回 defaultValue
(空白)
在第一次选择后 出现 期间,实际发生的是 DOM 本地状态显示您选择的内容。由于 vdom 没有变化(background-green 已经存在),Vue not re-rendering 因此不会重置值。
解决此问题的正确方法是在输入事件期间更新 defaultValue
(可能重命名)或使用 v-model
。重点是让 Vue 在渲染时设置正确的值。
handleInput(e) {
this.fillBg = true;
this.defaultValue = e.target.value;
},
如果我从 select
元素中删除 background-green
class 绑定或 value
绑定,那么它会像普通下拉菜单一样工作。但是假设我没有删除 background-green
class 绑定,那么在 selecting 之后,selected 选项不会显示,但是如果我再次 select相同的 selected 选项或其他选项将显示。 value
绑定的行为相同。那么为什么它第二次工作呢?这是我真实的concern/confusion.
这是 运行 示例的 link 示例代码。
问题是 :value="defaultValue"
实际上没有改变(因为 defaultValue
永远不会改变)和第一次发生重新渲染的副作用。
因为 :value
基本上总是 ""
,任何时候 <select>
是 re-rendered,Vue 将值设置为那个空字符串。
您已 handleInput
设置 fillBg = true
触发 re-render,因为 background-green
不在初始渲染中。这意味着 Vue 会将 <select>
的值重置回 defaultValue
(空白)
在第一次选择后 出现 期间,实际发生的是 DOM 本地状态显示您选择的内容。由于 vdom 没有变化(background-green 已经存在),Vue not re-rendering 因此不会重置值。
解决此问题的正确方法是在输入事件期间更新 defaultValue
(可能重命名)或使用 v-model
。重点是让 Vue 在渲染时设置正确的值。
handleInput(e) {
this.fillBg = true;
this.defaultValue = e.target.value;
},