首页

文章

vue 表单之通过v-model绑定单选按钮radio

发布网友 发布时间:2022-04-19 19:50

我来回答

2个回答

懂视网 时间:2022-04-20 17:38

分享

Vue 官网教程上关于 v-model 的讲解不是十分的详细,写这篇文章的目的就是详细的剖析一下, 并介绍 Vue 2.2 v-model改进的地方,然后穿插的再说点 Vue 的小知识。

在 Vue 中,有许多方法和 Angular 相似,这主要是因为 Angular 是 Vue 早期开发的灵感来源。然而,Augular 中存在许多问题,在 Vue 中已经得到解决。


v-model 用在 input 元素上时

v-model虽然很像使用了双向数据绑定的 Angular 的 ng-model,但是 Vue 是单项数据流,v-model 只是语法糖而已:↓

<input v-model="sth" />
<input v-bind:value="sth" v-on:input="sth = $event.target.value" />

第一行的代码其实只是第二行的语法糖。然后第二行代码还能简写成这样:↓

<input :value="sth" @input="sth = $event.target.value" />

要理解这行代码,首先你要知道 input 元素本身有个 oninput 事件,这是 HTML5 新增加的,类似 onchange ,每当输入框内容发生变化,就会触发 oninput ,把最新的value传递给 sth
如果你不知道 $event 是从哪来的,那你需要点击它再复习一下文档。

我们仔细观察语法糖和原始语法那两行代码,可以得出一个结论:

在给 <input /> 元素添加 v-model 属性时,默认会把 value 作为元素的属性,然后把 'input' 事件作为实时传递 value 的触发事件


v-model 用在组件上时

v-model 不仅仅能在 input上用,在组件上也能使用,下面是一个和 Vue 官网教程类似的例子(在看这个例子时我们要考虑两个问题):


实例演示.gif

父组件的 price 的初始值是 100,更改子组件的值能实时更新父组件的 price

<div id="demo"> <currency-input v-model="price"></currentcy-input> <span>{{price}}</span></div><script src="https://cdn.bootcss.com/vue/2.3.0/vue.js?1.1.11"></script><script>Vue.component('currency-input', {
 template: `
 <span>
 <input
 ref="input"
 :value="value"
 <!--为什么这里把 'input' 作为触发事件的事件名?`input` 在哪定义的?-->
 @input="$emit('input', $event.target.value)"
 >
 </span>
 `,
 props: ['value'],// 为什么这里要用 value 属性,value在哪里定义的?貌似没找到啊?
})var demo = new Vue({
 el: '#demo',
 data: {
 price: 100,
 }
})</script>

如果你知道这两个问题的答案,那么恭喜你真正掌握了 v-model,如果你没明白,那么可以看下这段代码:↓

<currency-input v-model="price"></currentcy-input><!--上行代码是下行的语法糖
 <currency-input :value="price" @input="price = arguments[0]"></currency-input>
-->

现在你知道 valueinput 从哪来的了吧。与上面总结的类似:

给组件添加 v-model 属性时,默认会把 value 作为组件的属性,然后把 'input' 值作为给组件绑定事件时的事件名


v-model 的缺点和解决办法

在创建类似复选框或者单选框的常见组件时,v-model就不好用了。

<input type="checkbox" v-model="sth" />

v-model 给我们提供好了 value 属性和 oninput 事件,但是,我们需要的不是 value 属性,而是 checked 属性,并且当你点击这个单选框的时候不会触发 oninput 事件,它只会触发 onchange 事件。这就尴尬了

热心网友 时间:2022-04-20 14:46

用v-model绑定单选框能带来很多便捷的开发体验。
基础用法
<template>
<div
id="app">
<input
type="radio"
id="male"
value="Male"
v-model="gender">
Male
<input
type="radio"
id="female"
value="Female"
v-model="gender">
Femalea
<p>{{gender}}</p>
</div>
</template>
<script>
export
default
{
name:
'app',
data
()
{
return
{
gender:
''
}
}
}
</script>
新建一个名为
gender
的数据模型,通过
v-model
把两个单选按钮都绑定
gender

<p>
也绑定了
gender
,所以单选按钮选了哪项,都会把对应的
value
值赋给
gender

从而使
<p>
的内容也发生变化。
通过
v-model
绑定,Vue会帮我们解决分组问题。以前使用单选按钮时,是需要设置
name
属性的,现在用
v-model
的话,就不用设置
name
属性了。
默认值
如果需要在页面第一次加载的时候就有一个默认选项,可以在数据模型里直接使用对应的
value
值。
比如希望页面在第一次加载时默认选中
Male。
<template>
<div
id="app">
<input
type="radio"
id="male"
value="Male"
v-model="gender">
Male
<input
type="radio"
id="female"
value="Female"
v-model="gender">
Female
<p>{{gender}}</p>
</div>
</template>
<script>
export
default
{
name:
'app',
data
()
{
return
{
gender:
'Male'
}
}
}
</script>
只要把数据模型里的
gender
的值改成“Male”即可。
当然,这个值是不能随便写的。一般是需要写上其中一个单选按钮的
value
值。
如果随便写一个字符串也不会报错,最后的作用其实和空字符串一样。
总结
以上所述是小编给大家介绍的vue
表单之通过v-model绑定单选按钮radio,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
您可能感兴趣的文章:对Vue-
动态元素属性及v-bind和v-model的区别详解vue
v-model实现自定义样式多选与单选功能vue
v-model动态生成详解vue中v-model的应用及使用详解vue如何在自定义组件中使用v-modelvue项目中v-model父子组件通信的实现详解vue
自定义组件
v-model双向绑定、
父子组件同步通信的多种写法vue中v-model动态生成的实例详解VUE中v-model和v-for指令详解浅谈
Vue
v-model指令的实现原理vue
v-model表单控件绑定详解
历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... Vue+Element-UI怎么在验证用户名的时候判断用户名... vue.js怎么添加密码框验证 vue 表单验证和angular表单验证哪个好 怎样利用Vue动态生成form表单 vue 表单验证的时候,为什么我的每个绑定的都需要... 用vue + element-ui 表单验证的时候怎么调用后台接... vue elementui el-form rules动态验证的实例代码详解 vue validator怎么验证表单不能为空 用vue + element-ui在表单验证的时候怎么调用后台... 在vuecli中用vuex写一个验证是否为空的表单,点击... vue表单验证怎么判断单条格式错误 vue-element的表单验证能调用methods里的方法吗? 如何利用Vue.js库实现表单校验 有人请求共享照片,不小心接受了,我的是苹果手机,... 双瞳为什么杀老外 哪位大神有2001年香港陈国富执导,梁家辉、刘若英... 普法栏目剧 古镇奇谭·双瞳的演员表 如何评价双瞳?剧情有什么出彩的地方? 双瞳的另一个结局 双瞳的带字幕的资源 vue实时监听多个表单数据是否有值 在vue中如何动态绑定表单元素的属性 当一个表单提交后才能显示另一个按钮怎么用vue实现 如何通过vue定时提交隐藏的form表单 懒人红豆早餐薄饼的做法步骤图,怎么做好吃 红豆白面还有鸡蛋加在一起可以做鸡蛋饼吗 红豆饼最简单的做法是怎样的? 如何制作外酥里嫩的红豆煎饼? 芝麻鸡蛋豆沙饼的做法大全图解 早餐饼的制作 谁能教我一些用鸡蛋做饼和糕点之类的 蛋香红薯饼的做法,蛋香红薯饼怎么做好吃,蛋香 煎饼的各种做法 求一份正宗台湾红豆饼的面皮配方!跪谢亲们! 红豆沙饼的做法大全 台湾红豆饼面皮做法是什么? 台湾红豆饼面糊配方有哪些? 哪里有鸡蛋汉堡红豆饼技术配方 红豆薏米粥加鸡蛋饼会胖吗 鸡蛋饼可以用来做什么
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com