vue组件数据双向绑定

双向绑定方式

v-model

父组件=>子组件   ( 父组件的昵称传递给子组件)

父:

<update-name v-model="user.name" @close="isShowUpdateName = false" />

子:

props: {
    value: {
      type: String,
      required: true
    }
  }
data() {
    return {
      localName: this.value
    };
  },
子组件=>父组件    input为vue2中内置的属性
this.$emit("input", this.localName);

其中v-model传递给子组件的prop默认名称为value,事件默认为input,如果想要修改这两个默认值,可以使用model来重新指定,如上面的例子中,指定v-model传递给子组件的名称为msg,事件为change

props: {
        msg: String
    },
model: {
        prop: 'msg',
        event: 'change'
    },
methods:{
        handleChange(){
        this.$emit("change", this.localName);
    }
}

.sync

父:

<updateGender
        v-if="isShowUpdateGender"
        :gender.sync="user.gender"
        @close="isShowUpdateGender = false">
</updateGender>

子:

 props: {
    gender: {
      type: Number,
      required: true
    }
  },

子传父:

 this.$emit('update:gender', this.localGender)

vue3取消了.sync这种语法,使用v-model:title 语法代替

// 父组件
<template>
    <div>
        我是父子组件之间同步的数据{{data}}
// 父组件传递给子组件title属性(默认使用value)
// 通过update:title(默认使用update:value) 方法将子组件传递的值赋值给data
        <child v-model:title = data></child>
    </div>
</template>
<script>
    data(){
      return {
        data:'我是来自父组件的数据'
      }
    }
</script>
//子组件
<template>
  <div>
    <button @input="childDataChange">{{title}}</button>
  </div>
</template>
 
<script>
    props:{
      title:{
        default:'',
        type:String
      }
    },
    methods:{
      childDataChange(v){
        this.$emit('update:title',v) // 触发update:data将子组件值传递给父组件
      }
    }
</script>

vue3允许写多个v-model,vue2不允许写多个v-model 

//父组件
<template>
    <div>
        <child v-model:value1='dValue1' v-model:value2='dValue2'></child>
        // 等价于 默认给子组件传递两个值value1、value2
        // 子组件更新函数update:value1将接受到的参数赋值给dValue1
        // 子组件更新函数update:value2将接受到的参数赋值给dValue2
        <child :value1='dValue1' @update:value1='val=>{ dValue1= val }'
               :value2='dValue2' @update:value1='val=>{ dValue2= val }'
        ></child>
    <div/>
</template>
<script>
data() {
      return {
        dValue1: '父组件的数据1',
        dValue2: '父组件的数据2' 
      }
    }
</script>

拓展

vue双向绑定的优势?

Vue.js的双向绑定(Two-Way Data Binding)是一种数据绑定技术,它允许数据的自动同步,即当数据发生变化时,视图会自动更新,反之亦然。Vue.js的双向绑定具有以下优势:

  1. 简化开发:双向绑定可以简化开发,减少代码量。开发者不需要手动编写代码来同步数据模型和视图,Vue.js会自动处理这些操作。

  2. 提高开发效率:双向绑定可以减少开发者的工作量,提高开发效率。开发者可以专注于业务逻辑的实现,而不需要花费大量时间来处理数据同步的问题。

  3. 提高代码的可读性和可维护性:双向绑定使得代码更加清晰和易于理解。开发者可以清楚地看到数据模型和视图之间的关联,从而更容易理解和维护代码。

  4. 减少错误:双向绑定可以减少由于手动同步数据模型和视图而导致的错误。由于Vue.js会自动处理数据同步,因此可以避免由于手动操作而导致的错误。

  5. 提高用户体验:双向绑定可以提供更好的用户体验。当用户在视图中进行操作时,数据模型会自动更新,从而实现即时反馈。这种即时反馈可以增强用户的体验感,提高用户的满意度。

总之,Vue.js的双向绑定是一种非常强大的数据绑定技术,它可以帮助开发者简化开发,提高开发效率,减少错误,并提供更好的用户体验。 

vue是单向数据流还是双向数据流?

Vue.js是单向数据流(One-Way Data Flow)的,但也可以实现双向数据绑定(Two-Way Data Binding)。

在Vue.js中,数据流是单向的,即从父组件到子组件。父组件可以通过props将数据传递给子组件,子组件可以通过事件向父组件发送消息。这种单向数据流的设计使得组件之间的通信更加清晰和可预测。

然而,Vue.js也支持双向数据绑定。在Vue.js中,可以使用v-model指令来实现双向数据绑定。当用户在输入框中输入内容时,输入框的值会自动更新到数据模型中,反之亦然。这种双向数据绑定使得开发更加方便,但也需要注意数据同步的问题。

总的来说,Vue.js是单向数据流的设计,但也可以实现双向数据绑定。开发者可以根据具体的需求和场景选择使用单向数据流或双向数据绑定。

React是单向数据流还是双向数据流?

React是单向数据流(One-Way Data Flow)的,但也可以实现双向数据绑定(Two-Way Data Binding)。

在React中,数据流是单向的,即从父组件到子组件。父组件可以通过props将数据传递给子组件,子组件可以通过回调函数向父组件发送消息。这种单向数据流的设计使得组件之间的通信更加清晰和可预测。

然而,React也支持双向数据绑定。在React中,可以使用受控组件(Controlled Components)来实现双向数据绑定。当用户在输入框中输入内容时,输入框的值会自动更新到数据模型中,反之亦然。这种双向数据绑定使得开发更加方便,但也需要注意数据同步的问题。

总的来说,React是单向数据流的设计,但也可以实现双向数据绑定。开发者可以根据具体的需求和场景选择使用单向数据流或双向数据绑定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

零凌林

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

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

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

打赏作者

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

抵扣说明:

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

余额充值