vue sync绑定数据

子组件修改父组件数据

子组件通过input框修改父组件数据
用到了.sync双向绑定数据

父组件:<coment-children v-if="show" :isShow.sync="show" :isTxt.sync="fathertxt"></coment-children>
子组件:this.$emit('update:isTxt', this.childtxt)

一、child.vue代码如下:

<template>
  <div style="width:200px;height:200px;background:red;">
    我是helloWorld模块的子组件
    <button @click="$emit('update:isShow',false)">我是子组件的按钮点我隐身</button>
    <input v-model.lazy="childtxt" />
    <br />
    {{childtxt}}
    <hr />
    <input type="text" value="1" v-on:input="inputFunc" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      childtxt: ''
    }
  },
  watch: {
    childtxt(newValue) {
      console.log(newValue);
      this.$emit('update:isTxt', this.childtxt)
    }
  },
  methods: {
    inputFunc() {
      console.log(this.childtxt)
    }
  }
}
</script>

二、father.vue代码如下:

<template>
  <div>
    <button @click="show = true">我是父组件的按钮</button>
    <coment-children v-if="show" :isShow.sync="show" :isTxt.sync="fathertxt"></coment-children>
    {{fathertxt}}
  </div>
</template>
<script>
import comentChildren from "./children";
export default {
  data() {
    return {
      show: false,
      fathertxt: 'fathertxt'
    }
  },
  components: {
    comentChildren
  }
};
</script>
### Vue 父子组件的数据绑定方法 在 Vue 中,父子组件间的数据交互遵循单向数据流原则。父组件可以通过 `props` 将数据传递给子组件,而子组件则通过 `$emit` 发送事件通知父组件更新状态。 #### 使用 Props 和 Emit 实现双向绑定 当父组件需要监听来自子组件的状态变化时,通常会采用这种模式: ```html <!-- ParentComponent.vue --> <template> <div> <ChildComponent :message="parentMessage" @update:message="handleUpdate"></ChildComponent> {{ parentMessage }} </div> </template> <script> export default { data() { return { parentMessage: 'Hello from parent' } }, methods: { handleUpdate(newVal) { this.parentMessage = newVal; } } } </script> ``` ```html <!-- ChildComponent.vue --> <template> <input type="text" :value="message" @input="$emit('update:message', $event.target.value)"> </template> <script> export default { props: ['message'] } </script> ``` 这种方法确保了即使是在复杂的嵌套结构下也能保持清晰的数据流向[^1]。 #### 利用 `.sync` 修饰符简化写法 对于某些场景,如果希望更简洁地表达同步关系,则可以考虑使用`.sync`修饰符: ```html <!-- ParentComponent.vue --> <template> <div> <ChildComponent :message.sync="parentMessage"/> {{ parentMessage }} </div> </template> ``` 此时,在子组件内部只需正常触发 update:eventName 即可完成通信过程[^3]. #### 推荐做法:借助 v-model 完成双向绑定 最常用也最为直观的方式就是利用内置的 `v-model` 指令来进行双向绑定操作,这实际上是上述两种方案的一种语法糖形式: ```html <!-- ParentComponent.vue --> <template> <div> <ChildComponent v-model="parentMessage"/> {{ parentMessage }} </div> </template> ``` 而在子组件中只需要定义好相应的 input event 来响应输入行为即可: ```html <!-- ChildComponent.vue --> <template> <input type="text" :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" /> </template> <script> export default { props: ['modelValue'], }; </script> ``` 这种方式不仅提高了代码的可读性和维护性,同时也减少了模板中的冗余逻辑.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端段

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值