原文链接:http://www.geeee.top/2019/04/03/vue-v-model/ 转载请注明出处

v-model

v-model 是vue的一个语法糖,用于在表单控件或者在组件上创建双向绑定。双向绑定即修改model后界面view会自动更新,如果用户更新了view,model的数据也会自动更新。

表单控件上使用v-model

<template>
<div>
<input type="text" placeholder="请输入姓名" v-model="name"/>
</div>
</template> <script>
export default {
data() {
return {
name: ''
}
}
}
</script>

自定义组件的v-model

自定义组件中定义的props,是单向的,只能是父级向子组件传递,父级prop的更新会向下流动到子组件中,但是子组件不能修改父级的prop数据。 但有时候又有一些场景,需要子组件能够修改父组件传递过来的数据,此时就可以通过v-model实现。

用法:

设置组件的model选项,该选项值是个object有两个键prop和event,通过prop指定进行双向绑定的属性,event指定该组件中什么事件触发后,更新prop

举例:定义一个组件,该组件有两个属性photoInfo和,zipCode, 其中photoInfo是Object类型可双向绑定。

// 组件定义personalInfo.vue
<template>
<div>
<select :value="city" @change = "handleAreaCodeChange" placeholder="区号">
<option>北京</option>
<option>上海</option>
</select>
<input
:value="phoneInfo.phone"
type="number"
placeholder="手机号"
@input="handlePhoneChange"
/>
<input
:value="zipCode"
type="number"
placeholder="邮编"
@input="handleZipCodeChange"
/>
</div>
</template>
<script>
export default {
model {
prop: 'name',
event: ''
},
props: {
phoneInfo: Object,
zipCode: String,
},
methods: {
handleAreaCodeChange(e) {
this.$emit('change', {
...this.phoneInfo,
areaCode: e.target.value
});
},
handlePhoneChange(e) {
this.$emit("change", {
...this.phoneInfo,
phone: e.target.value
});
},
handleZipCodeChange(e) {
this.$emit("update:personInfo.zipCode", e.target.value);
},
}
}
</script>

在index.vue中使用该组件

// 组件调用

<template>
<personal-info v-model="personInfo" :zipCode="zipCode"
@update:zipCode="val => (zipCode = val)"></personal-info>
</template> <script>
import personalInfo from './personalInfo.vue'
export default {
components: {
personalInfo
},
data() {
personInfo: {areaCode: "+86", phone: ""},
zipCode: "",
}
}
</script>

注意:

如果没有设置model选项,组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件。

v-model的本质

其实就是vue提供的一个语法糖,它等价于 v-bind: + v-on:

<input v-model="something"/>

等价于

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

深入理解v-model的更多相关文章

  1. 理解v$sql的exact_matching_signature与force_matching_signature

    理解v$sql的exact_matching_signature与force_matching_signature 对SQL语句,去掉重复的空格(不包括字符常量),将大小写转换成相同,比如均为大写(不 ...

  2. [20171120]理解v$session的state字段(11G).txt

    [20171120]理解v$session的state字段(11G).txt --//https://blogs.oracle.com/database4cn/vsession-%e4%bd%a0%e ...

  3. 3-29 params的理解; Active Model Errors; PolymorphicRoutes 多态的路径; ::Routing::UrlFor

    params的理解和作用: http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-require A ...

  4. 理解Spring MVC Model Attribute和Session Attribute

    作为一名 Java Web 应用开发者,你已经快速学习了 request(HttpServletRequest)和 session(HttpSession)作用域.在设计和构建 Java Web 应用 ...

  5. 【译】理解Spring MVC Model Attribute 和 Session Attribute

    作为一名 Java Web 应用开发者,你已经快速学习了 request(HttpServletRequest)和 session(HttpSession)作用域.在设计和构建 Java Web 应用 ...

  6. Attention Model(注意力模型)思想初探

    1. Attention model简介 0x1:AM是什么 深度学习里的Attention model其实模拟的是人脑的注意力模型,举个例子来说,当我们观赏一幅画时,虽然我们可以看到整幅画的全貌,但 ...

  7. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  8. ASP.NET MVC Model绑定(二)

    ASP.NET MVC Model绑定(二) 前言 上篇对于Model绑定的简单演示想必大家对Model绑定的使用方式有一点的了解,那大家有没有想过Model绑定器是在什么时候执行的?又或是执行的过程 ...

  9. ASP.NET MVC Model绑定(一)

    ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...

  10. MVC系列之二 Model层细解

    一.简介 在上一篇将MVC的时候,有很有朋友对简单三层的概念不是很熟悉,因此,今天进行简单三层的一个简单介绍,同时为理解MVC中的Model做知识累计. 传统的三层主要指的是UI层,BLL层,DAL层 ...

随机推荐

  1. CentOS7 安装oracle客户端

    1.本机环境CentOS7 64 [root@localhost etc]# uname -a Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 ...

  2. CentOS7 使用ifconfig命令 ENS33没有IP地址的解决办法

    最近在研究和学习Linux操作系统,我并没有安装独立的Linux操作系统,我选择在虚拟机上安装Linux操作系统.我选择的虚拟机的版本是VMware Workstation Pro14,然后在虚拟机上 ...

  3. Java多线程系列2 线程常见方法介绍

    守护线程 执行一些非业务方法,比如gc.当全部都是守护线程的时候,jvm退出 线程优先级  设置线程优先级:setPriority(int priorityLevel).参数priorityLevel ...

  4. android studio 将自己的项目生成jar包

    很多情况下我们开发的项目不是一个完整的app,而是完成一部分功能,供别人的app使用的情况.这时就需要将我们的项目打包生成jar或者arr库文件,让别人的app导入我们的jar包,就能直接使用我们项目 ...

  5. CSS样式简介

    层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态 ...

  6. jQuery的事件,动画效果等

    一.事件 click(function(){}) 点击事件 hover(function(){})   悬浮事件,这是jQuery封装的,js没有不能绑定事件 focus(function(){}) ...

  7. 项目部署到服务器上之后request.getRemoteAddr()为什么获取的都是本地地址

    获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了.如 ...

  8. PB的一些记录

    断点设置在函数内,发现返回值没有,需要取消函数内断点才正常 加密--采用矩阵乘法 行列式取+_1的矩阵与逆矩阵其元素都是整数,, 可以使用matlab来找到这些矩阵 A* I   =E       A ...

  9. docker学习笔记-安装

    安装docker Ubuntu Docker 安装 Docker 支持以下的 Ubuntu 版本: Ubuntu Precise 12.04 (LTS) Ubuntu Trusty 14.04 (LT ...

  10. hdu 1290_献给杭电五十周年校庆的礼物

    Description 或许你曾经牢骚满腹或许你依然心怀忧伤或许你近在咫尺或许你我天各一方 对于每一个学子母校 永远航行在生命的海洋 今年是我们杭电建校五十周年,这是一个值得祝福的日子.我们该送给母校 ...