首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么子组件的v-model不会从emit回流到父组件?

子组件的v-model不会从emit回流到父组件的原因是因为v-model实际上是一个语法糖,它是基于props和emit实现的双向数据绑定。

在Vue中,父组件通过props将数据传递给子组件,子组件通过emit触发事件将数据传递回父组件。但是v-model只是简化了这个过程,它将props和emit封装成了一个语法糖,使得数据的传递更加简洁。

当子组件使用v-model绑定一个值时,实际上是将这个值作为props传递给子组件,并且在子组件内部通过emit触发一个名为"update:modelValue"的事件将数据传递回父组件。父组件接收到这个事件后,可以通过监听这个事件来更新自己的数据。

但是需要注意的是,子组件内部对v-model绑定的值进行修改,并不会直接影响到父组件的数据。这是因为在Vue中,props是单向数据流,父组件向子组件传递的数据是只读的,子组件不能直接修改props的值。所以子组件内部对v-model绑定的值的修改只会影响到子组件自身的数据,而不会回流到父组件。

如果需要在子组件内部修改父组件的数据,可以通过在子组件内部定义一个data属性,并在子组件内部修改这个data属性的值。然后通过在子组件内部监听父组件传递的props的变化,并在变化时将props的值赋给子组件内部的data属性,从而实现子组件内部对父组件数据的修改。

总结起来,子组件的v-model不会从emit回流到父组件是因为props是只读的,子组件不能直接修改props的值,而v-model只是简化了props和emit的双向数据绑定过程,但并不改变props的只读性质。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

组件使用v-model组件竟然不用定义props和emit抛出事件

大家都知道v-model是:modelValue和@update:modelValue语法糖,但是你知道为什么我们在组件内没有写任何关于props定义和emit事件触发代码吗?...只能通过emit抛出事件给组件,让组件在事件调中去修改props传递变量,然后通过props将更新后变量传递给组件。...这就是为什么不需要在组件中使用使用emit抛出事件,因为在defineModel宏函数编译成useModel函数中已经帮我们使用emit抛出事件了。...使用defineModel宏函数后,为什么我们在组件内没有写任何关于emit事件触发代码?...并且将最新值随着事件一起传递给组件,由组件在update:modelValue事件调中将组件v-model绑定变量更新为最新值。

22210
  • 如何构建运行良好Vue组件

    假设有组件Parent和组件Child // Parent ......此处有两处异常: 组件中设置placeholder等属性没有传到组件组件设置属性传递给了组件根元素,即label,而label是不需要 attrs和inheritAttrs:false...即分别用来解决这两个问题首先,inheritAttrs:false解决组件根元素继承元素属性;其次,组件中添加了v−bind=" 接受浏览器键盘导航规范 可访问性和键盘导航是Web开发中最常被遗忘部分之一...使用事件优先于调 当涉及到组件到其父组件数据通信和用户交互时,有两个常见选择:props中调函数和事件。...因为 Vue 自定义事件不会像原生浏览器事件那样冒泡,所以两者在功能上是等效,但是对于可重用组件,建议能使用事件就使用事件,其次在再是调,为什么

    3.7K20

    Vue总汇

    不会报错 4.定义:props是上游组件传递数据,组件不可修改 5.props是传子最常见通信方式 props传子 组件组件通过绑定属性传递一个数据 组件通过Props接收组件传递属性值...$childern获取元素直接操作元素或调用元素方法【非常不推荐】 $emit 1.常规方式 emit调用级传过来函数 2. parent获取组件实例对象,直接修改或调用【非常不推荐...】 双向通信 v-model 作用:使父子组件进行双向伪绑定 语法: 1.传子 v-model绑定到组件上 2. this....$emit('input',newData) 概念:当我们在组件上使用使用v-model时候,会自动组件注入一个value值和input函数, 组件如果想修改value就是用$emit调用...,比如样式绑定 但是在组件slot标签上传参默认组件不能直接使用 传子 和常规传参一样在组件上绑定属性子组件用props接收 // 组件 <slot name='header

    11110

    Vue自定义组件:解密v-model,轻松实现双向数据绑定

    实现自定义组件v-model功能可以按照以下步骤进行: 在自定义组件中定义一个value属性:这个属性用于接收组件传递给组件值,并在组件内部进行使用。...对于非表单元素自定义组件,可以根据需要实现类似的双向数据绑定功能,但需要注意是,此时v-model指令并不会像在表单元素中那样自动更新数据。...在非表单元素自定义组件中实现类似v-model双向数据绑定,可以按照以下步骤进行: 在自定义组件中定义一个value属性:这个属性用于接收组件传递给组件值,并在组件内部进行使用。...在自定义组件内部,通过$emit方法触发自定义事件:当在组件中修改了value属性值时,通过调用this....在组件中使用组件时,使用v-bind指令将组件数据属性绑定到组件value属性上。 在组件中监听子组件自定义事件,并更新组件数据属性。

    84730

    前端面试之Vue

    挂载阶段 created->created->mounted->mounted 组件更新阶段 beforeUpdate->updated 组件更新阶段 beforeUpdate->...props/emit 父子组件通信 ->props,-> emit/on 自定义事件 兄弟组件通信 Event Bus 实现跨组件通信 Vue.prototype....vuex 跨级组件通信 Vuex、attrs、listeners Provide、inject $emit 后面的两个参数是什么 1、组件可以使用 props 把数据传给组件。...2、组件可以使用 $emit,让组件监听到自定义事件 。...它能够不活动组件实例保存在内存中,而不是直接将其销毁,它是一个抽象组件不会被渲染到真实DOM中,也不会出现在组件链中。 作用:实现组件缓存,保持这些组件状态,以避免反复渲染导致性能问题。

    3.7K30

    京东前端二面必会vue面试题(持续更新中)_2023-02-24

    props / $emit 适用 父子组件通信 组件组件传递数据是通过 prop 传递组件传递数据给组件是通过$emit 触发事件来做到 ref 与 $parent / $children..."> props:['changeMsgFn'] 组件组件通信 组件组件传递事件方法,组件通过$emit触发事件,调给组件 组件vue模板father.vue: ...,可以通过 v-model属性来配置组件接收prop名称,以及派发事件名称。...通过input事件把数据$emit 出去,在组件接受。组件设置v-model值为input $emit过来值。 Vue模版编译原理知道吗,能简单说一下吗?...组件不会被卸载: (1)单页面渲染 要切换组件作为组件全屏渲染,组件中正常储存页面状态。

    83130

    vue .sync修饰符使用

    不幸是,真正双向绑定会带来维护上问题,因为组件可以修改组件,且在组件组件都没有明显改动来源。 这也是为什么我们推荐以 update:my-prop-name 模式触发事件取而代之。...其实还是vue组件可以监听子组件事件,自组件可以触发组件事件 father.vue <input type="text...$<em>emit</em>('incre', ++this.num) } }, } 在没有sync<em>的</em>时候,我们要实现双向绑定,可能需要在<em>父</em><em>组件</em>里绑定一个事件和一个值 father.vue...$<em>emit</em>('update:word', newword) } }, } <em>父</em><em>组件</em>中<em>的</em><em>子</em><em>组件</em>,少写了一个自定义事件属性,<em>子</em><em>组件</em>中$<em>emit</em>直接出发<em>父</em><em>组件</em>中数据<em>的</em>更新,清新明了...父子<em>组件</em><em>的</em>双向数据绑定 <em>父</em><em>组件</em>改变数据可以改变子<em>组件</em>, 但是<em>子</em><em>组件</em><em>的</em>内容改变并<em>不会</em>影响到<em>父</em><em>组件</em> 可以通过2.3.0新增<em>的</em>sync修饰符来达到双向绑定<em>的</em>效果 father.vue

    1.1K20

    Vue3 | 父子组件间通信、组件间双向绑定高级内容、插槽详解、动态组件、异步组件

    板块 整理组件事件 使用 组件emits板块 Object形式 校验外传参数值 结合$emit、v-bind与v-model 实现 父子组件通信(数据双向绑定) 结合$emit、v-bind与v-model...$emit('【自定义事件名】'), 向外发送一个事件; 接着各级组件会收到这个事件, 则在组件中 调用 组件标签处, 以 @【事件名】= "调方法名"形式,监听该事件以及配置调方法...当然 组件 接收 组件参数 后 计算逻辑, 可以在 组件传参 时候 计算完成 再传给this.$emit()!..., 组件 承接变量modelValue 同父组件count字段 双向绑定, (实际上就是v-model特性 —— 将 组件内容即modelValue 同 组件数据字段双向绑定)...、v-bind与v-model 实现 父子组件通信(多个字段应用案例) 如下代码, 组件count与组件承接testField字段, 组件count1与组件承接testField1

    6.2K10

    vue中v-model刨根问底

    组件中,通过props中value来接收组件中传值,同时可以通过 $emit('input', e) 来同步更改组件值。...在组件中使用v-model通过props接收值和$emit传值,同我们自己在组件上绑定一个属性和$emit传值可以少一步在组件中监听@input操作,所以在组件使用v-model也是很丝滑。...: { prop: 'city', // 对应组件中绑定属性(即组件中接收props) event: 'change'// 对应组件中监听事件(即组件$emit) },...亲戚sync和updatevue1.0版本就提供了.sync 绑定修饰符,组件 prop 默认是单向绑定,加上 .sync 后会把子组件 prop 属性同步组件。...$emit('update:city', e)、$emit('update:country', e)来更改组件值vue 3 中新增了一个emits选项:和现有的 props 选项类似,这个选项可以用来定义一个组件可以向其父组件触发事件

    28320

    Vue 面试知识点

    $nextTickVue 是异步渲染,data 改变后,DOM 不会立刻渲染,页面渲染时会将 data 做整合,$nextTick 会在 DOM 渲染完之后执行延迟调,减少 DOM 操作次数,提高性能组件...data 为什么返回函数两个实例都引用同一个对象,当其中一个实例属性改变时,另一个实例属性也随之改变,只有当两个实例拥有自己作用域时,才不会互相干扰Component.prototype.data...beforeUpdateupdatedbeforeDestroy 清除定时器、自定义事件destroyed父子组件创建、更新顺序组件 created 组件 created 组件 mounted 组件...mounted组件 beforeUpdate 组件 beforeUpdate 组件 updated 组件 updated组件之间传值通信组件组件传值通过 props组件组件传值通过...$emit 触发回调其他组件通信,通过实例一个 Vue 实例 event 作为媒介,要相互通信组件之中,都引入 event动态路由配置(路由懒加载){ path: '/user/:id', component

    1K10

    Vue.js 组件数据传递方法

    组件组件传数据 这种应该是 vue.js 中最常见也是最为自然一种方式了,要求我们在组件中声明 props 然后在组件中为组件 prop 赋值。...那现在就变成了怎么调用到组件方法了,办法说来也简单那不就是,把组件方法通过 props 传递给组件,这样子组件就能调用到了。...组件组件传递数据 - 自定义事件实现 这个实现和 props 在代码上差不多,props 实现是在组件里直接调用组件函数。...事件实现手法是组件触发事件,并配置好对应参数值,组件只要注册好事件监听就行了。...emit 方法,事件消费者通过 on 主动注册事件调,就能完成数据传递了。

    6K10

    vue组件详解(三)——组件通信

    组件用$emit ()来触发事件,组件用$on()来监昕组件事件。...total发生变化时,会通过传递value值,影响组件input中value值,而组件改变自己input中value值,又会广播给组件,影响组件total值。...bus 把事件updateMessage发出去,此时app 就会接收到来自bus 事件,进而在调里完成自己业务逻辑。...四、链与组件索引 除了中央事件总线bus 外,还有两种方法可以实现组件间通信:链和组件索引。 在组件中,使用this....$parent 可以直接访问该组件实例或组件组件也可以通过this.$children 访问它所有的组件,而且可以递归向上或向下无线访问, 直到根实例或最内层组件

    1.2K40

    组件化详细

    想使用其他组件数据,就需要组件通信 如何通信及其组件之间关系分类 父子关系 非父子关系 组件通过 props 将数据传递给组件 组件利用 $emit 通知组件修改更新 通信代码示例...props接收通信代码示例 传值步骤 $emit触发事件,给组件发送消息通知 组件监听$emit触发事件 提供处理函数,在函数性参中获取传过来参数 props 定义 组件上...v-model其实就是 :value和@input事件简写 组件:props通过value接收数据,事件触发 input 组件v-model直接绑定数据 组件 <select :value=...所以就可以通过@blur="isEdit = false"实现失去焦点 显标签信息 信息是通过组件传入, 可以通过v-model实现, 也可以通过前面所学props实现。...通过上述步骤就可以实现数据从父标签传入标签, 实现标签内容显 回车修改标签内容 上述显示标签信息是通过标签传子标签形式实现, 但是如何实现标签传入标签呢 ?

    18010

    【vue3】详解单向数据流,大家千万不用为了某某而某某了。

    : 所有的 props 都遵循着单向绑定原则,props 因组件更新而变化,自然地将新状态向下流往组件,而不会逆向传递。...那么问题来了: reactive 在组件可以改,不会难以理解。 reactive 通过依赖注入方式给组件,虽然官网不建议直接改,但是就问问你,你会不会直接改?...(后续跟进) emit 怎么可以改了? emit 本意是组件组件抛出一个事件,然后 vue 内部提供了一种方式(update:XXXXX),可以实现组件修改组件需求。 <!...如果限制是发起者的话,那么 emit 也不行,因为也是在组件发起,啥时候改,怎么改都是由组件决定,emit只是一个无障碍通道起始端,另一端是 v-model。...v-model + emit 目的是实现父子组件之间,值类型数据响应性,如果不用 emit 的话,如何实现?

    13210

    vue ---- 组件传值之间使用 v-model

    方法如下:   1、组件使用:msg.sync="aa" 组件使用$emit('update:msg', 'msg改变后值xxx')   2、组件传值直接传对象,组件收到对象后可随意改变对象属性...3、组件使用: v-model   第一种曾经被废除过,由于维护成本原因被删掉,但经过证实,确实有存在意义,又被加上。   ...$emit('update:snycTest', this.snycTest+1) //这儿是关键 update:snycTest 自定义事件会告诉组件组件 test值改为this.snycTest...(此处为aa组件组件调用)v-model能取到值,event说,我emit ‘cc’ 时候,参数值就是组件v-model收到值。...组件 {{'里面的值:'+ value}} // 组件使用时有v-model属性,value初始传‘what’ 不会被渲染

    1.3K20

    一文搞懂 Vue3 defineModel 双向绑定:告别繁琐代码!

    原因是因为vue2开始就已经是单向数据流,在组件中是不能直接修改props中值。而是应该由组件中抛出一个事件,由组件去监听这个事件,然后去修改组件中传递给props变量。...那么问题来了,vue2开始就变成了单向数据流。这里修改组件值后,组件变量值也被修改了,那这不就变回了vue1双向数据流了吗?...并且当在组件内改变model变量值后会抛出update:modelValue事件,组件收到这个事件后就会更新组件中对应变量值。...("update:modelValue", model.value); }); 看了上面的代码后你应该了解到了为什么可以在组件内直接修改defineModel返回值后父组件对应变量也会同步更新了吧...在组件内当修改ref变量值时会抛出一个事件给组件,让组件更新对应变量值,从而实现双向绑定。

    2K10
    领券