百科狗-知识改变命运!
--

表单输入绑定 - v-model 双向数据绑定 - vue 基础

梵高1年前 (2023-11-21)阅读数 25#技术干货
文章标签绑定

表单输入绑定

在前端处理表单时,我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦:

v-model指令帮我们简化了这一步骤:

另外,v-model还可以用于各种不同类型的输入元素。它会根据所使用的元素自动扩展到不同的 DOM 属性和事件组合:

  • 文本类型的元素会使用到value属性和input事件;
  • 使用checked property 和change事件;
  • 使用的value属性和change事件。
v-model会忽略所有表单元素的 attribute 的初始值(比如:valuecheckedselected)。它将始终将当前绑定的 JavaScript 状态视为数据的正确来源。你应该在 JavaScript 中声明该初始值,使用响应式数据


基础用法

文本(text)

输入的信息:{{ message }}

对于需要使用IME的语言(中文,日文和韩文等),你会发现v-model不会在IME输入的组合状态时触发更新。如果你的确想在此时也触发更新,请使用input事件监听器和value绑定值而不要使用v-model


多行文本(textarea)

Multiline message is:

{{ message }}


注意:插值表达式在中将不会工作。请使用v-model来替代。

{{ text }} 


复选框(checkbox)

单一的复选框,绑定的是布尔类型值:

const checked= ref(false)
{{ checked }}

我们还可以将多个复选框绑定到同一个数组或集合的值:

const checkedNames = ref([])
Checked names: {{ checkedNames }}
Jack John Mike


单选框(radio)

const picked = ref('')
Picked: {{ picked }}
One Two


选择框(select)

表单输入绑定 - v-model 双向数据绑定 - vue 基础

单个选择器的示例如下:

const selected = ref('')
选择的是: {{ selected }}
请选择 A B C

如果v-model表达式的初始值未能匹配任何选项,元素将被渲染为“未选中”状态。在 iOS 中,这会使用户无法选择第一个选项。因为这样的情况下,iOS 不会触发change事件。因此,更推荐像上面这样提供一个值为空的禁用选项


多选(值绑定到一个数组):

const selected = ref('')
选择的是: {{ selected }}
A B C


v-for渲染的动态选项:

const selected = ref('A')

const options = ref([
  { text: 'One', value: 'A' },
  { text: 'Two', value: 'B' },
  { text: 'Three', value: 'C' }
])
 {{ option.text }} 
Selected: {{ selected }}



值绑定

对于单选按钮,复选框及选择框的选项,v-model绑定的值通常是静态字符串(对于复选框也可以是布尔值):

 ABC 

但有时我们可能希望将该值绑定到当前活动实例上的动态属性,那么可以使用v-bind来做到。此外使用v-bind还使我们可以将选项值,绑定为非字符串类型


复选框(checkbox)

true-valuefalse-value是 Vue 特有的 attributes 且仅会在v-model存在时工作。这里toggle属性的值会在选中时被设为yes,取消选择时设为no。你同样可以通过v-bind将其绑定为其他动态值。

true-valuefalse-value attributes 不会影响value attribute,因为浏览器在表单提交时,并不会包含未选择的复选框。为了保证这两个值(例如:“yes”和“no”)的其中之一被表单提交,请使用单选按钮作为替代。


单选框(radio)

pick会在第一个按钮选中时被设为first,在第二个按钮选中时被设为second。


选择框(select)

123 

v-model同样也支持非字符串类型的值绑定!在上面这个例子中,当某个选项被选中,selected会被设为该对象字面量值{number: 123}。



修饰符

.lazy

懒加载。在默认情况下,v-model在每次input事件触发后,将输入框的值与数据进行同步(除了上述输入法组织文字时)。你可以添加lazy修饰符,从而转为在change事件之后,更新数据同步:


.number

确保为数值。如果想自动将用户的输入值自动转为数值类型,可以给v-model添加number修饰符:

这通常很有用,因为即使在type="number"时,HTML 输入元素的值也总会返回字符串。如果这个值无法被parseFloat()解析,则会返回原始的值。


.trim

去除两端空格。如果要自动去除用户输入内容中两端的空格,可以给v-model添加trim修饰符:


在组件上使用v-model

HTML 原生的输入元素类型并不总能满足需求。幸好,Vue 的组件系统允许你创建具有完全自定义行为且可复用的输入组件。这些输入组件甚至可以和v-model一起使用!

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)