为啥Vue会更新父级中的变量-未使用事件

Posted

技术标签:

【中文标题】为啥Vue会更新父级中的变量-未使用事件【英文标题】:Why does Vue update variable in parent - no event used为什么Vue会更新父级中的变量-未使用事件 【发布时间】:2021-11-10 20:48:24 【问题描述】:

根据Vue.js docs(组件:单向数据流)我假设我无法从子组件更新父变量。

怎么可能,当我将一个变量绑定到子组件时,它会被更新而不发出任何事件?

这里是Vue SFC playground example。

如何在子组件中使用变量的副本而不将更改传播到父组件?

编辑:我很好奇为什么 AccountPage.vue 中的属性 userAccount 会更新。

没有 v-model,没有提交事件,但它仍在更新。

【问题讨论】:

【参考方案1】:

该示例演示了v-model 的用法,如docs 中所述

自定义事件也可用于创建自定义输入 v 模型。请记住:

<input v-model="searchText">

做同样的事情:

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

意味着它确实触发了一个事件

【讨论】:

组件上没有v-model或者双向绑定。 查看 AccountForm.vue 上的第 7 行(第 3 个选项卡) 再次阅读我的评论。组件上没有 v-model。 正如@tauzN 评论的那样,您正在寻找错误的组件。 AccountForm.vue 是一个子组件,我很好奇为什么父变量会更新。 parent 中没有使用 v-model。【参考方案2】:

编辑: 在 AccountForm.Vue 中,在编写时会创建一个反应性且可变的 ref 对象

 const userAccount = ref (..) 

更改响应式对象会影响父级。如果您删除 ref(),您会看到父级没有更新。

https://v3.vuejs.org/api/refs-api.html#ref

旧答案: 当你使用 v-model 时,你创建了一个双向数据绑定。 v-model 是 v-bind 和 input 的简写,即通过 v-bind 将数据绑定到 child,并通过 child 发出的 input 事件接​​收数据。

所以,

<input v-model="searchText">

和写一样

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

https://vuejs.org/v2/guide/components.html#Using-v-model-on-Components

【讨论】:

组件上没有v-model或者双向绑定。 AccountForm.Vue 中没有 吗? 当然。但是数据来自不是 v-model 的父级的道具。

以上是关于为啥Vue会更新父级中的变量-未使用事件的主要内容,如果未能解决你的问题,请参考以下文章

Quasar(vue)中嵌套在路由器中的子级中的父级触发方法

如何访问深层嵌套父级中的方法 [Vue][Vuetify]

vuejs v-model 值没有在父级中更新?

javascript 从父级中的子级渲染节点更新

reactjs checkboxlist组件 - 更新父级中的状态更改

为啥我的复选框在它的父级中没有垂直对齐? [复制]