vue里面的model

Vue中的v-model:简化父子组件数据双向绑定

vue里面的model双向绑定,就是一种代码组合即语法糖,我们之前在实现功能的时候,父组件通过props向子组件里面传递参数,子组件处理完成之后,如果想将结果传回父组件的话,需要调用emit里面的自定义方法实现回传。父组件通过定义的方法,然后接收到子组件传递过来的参数之后,进行赋值处理即可。

vue这里面实现了一个简单的方式实现了上面的功能,及model,双向绑定。对于开发者来说,简化了一些代码,实际就是vue给你封装了,只需要简单的代码就可以实现传值-修改-回传的功能,其实本质还是 传递数据-加工-调用回调方法进行赋值。

vue官方文档对model的用法描述的很详细:自定义事件 | Vue.js

详细的看官方文档,这里面,我只是把文档里面主要的代码拷贝出来

v-model: 单个

父组件:

<my-component v-model:title="bookTitle"></my-component>

子组件:

app.component('my-component', {
  props: {
    title: String
  },
  emits: ['update:title'],
  template: `
    <input
      type="text"
      :value="title"
      @input="$emit('update:title', $event.target.value)">
  `
})

v-model:多个组件:

父组件:

<user-name
  v-model:first-name="firstName"
  v-model:last-name="lastName"
></user-name>

子组件:

app.component('user-name', {
  props: {
    firstName: String,
    lastName: String
  },
  emits: ['update:firstName', 'update:lastName'],
  template: `
    <input 
      type="text"
      :value="firstName"
      @input="$emit('update:firstName', $event.target.value)">

    <input
      type="text"
      :value="lastName"
      @input="$emit('update:lastName', $event.target.value)">
  `
})

上面代码主要看的地方为:

v-model:***: 父组件传递参数到子组件,如果是驼峰命名,在父组件里面记住用-分割

props: 子组件接受的参数

emit: 定义回调的方法,如果不在这里面定义,也可以自己写方法,然后通过this.$emit的方式回调。注意,这里面的方法为update,当然,在其他的博客里面,也会看到有change等方法。这些方法不需要在父组件调用子组件的时候重新定义,都是由vue已经定义好的

调用回调方法的时候,update:** 后面的变量名就是props接收的变量名,千万不要在分割,然后使用-进行连接了。

### Vue.js 中 `v-model` 指令实现原理解析 #### 一、概念概述 `v-model` 是 Vue 提供的一种用于创建双向数据绑定的语法糖。这种机制允许开发者轻松地在表单输入元素和组件之间同步状态,使得数据的变化能够自动反映到视图层,反之亦然。 #### 二、工作流程详解 当应用了 `v-model` 后,在底层实际上执行的是两个操作:监听用户的输入事件来更新数据模型,并通过特定属性将当前值传递给子组件或原生 HTML 元素[^3]。 对于普通的 `<input>` 或者其他类型的表单控件而言: - **设置初始值**:首次渲染时会读取关联的数据属性作为默认显示的内容; - **响应变化**:每当用户修改字段内容触发相应的 input/change 等事件之后,框架内部就会调用预先定义好的处理函数去改变对应变量的值; 而对于自定义组件,则涉及到更复杂的交互逻辑——即不仅要指定接收父级传入 props 的名称(通常是 modelValue),还要声明用来通知外界变更的方法名(一般约定为 update:modelValue)。这表明 `v-model` 并不是一个简单的赋值过程,而是包含了完整的通信协议设计[^1]。 ```html <!-- 基础案例 --> <input v-model="message"> <!-- 组件间使用 --> <custom-input :model-value="searchText" @update:model-value="newValue => searchText = newValue"></custom-input> ``` 上述代码片段展示了如何利用 `v-model` 来简化模板书写方式的同时保持良好的可维护性和扩展性。值得注意的是,在 Vue 3.x 版本里为了更好地支持多选框组以及其他复杂场景下的需求,官方还引入了一些新的特性改进[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值