Vue子组件修改父组件传递的数据之sync应用

子组件修改父组件传递的数据

子组件修改父组件传递来的数据,sync 应用。

.sync官网详情

方法1

父组件

<com-button :yan="co"></com-button>

子组件

<template>
    <div id="btn">
      <button :style="{color:yan}">我是按钮</button>
      <button @click="yan='yellow'">修改</button>
      <!--
		虽然子组件接收的yan可以被修改,但是firebug报错,说明不推荐、不允许。
		分析:父组件可以修改,组件两头都修改,没有秩序了 -->
    </div>
</template>

<script>
export default {
  name: 'Button',
  // 对父组件传递过来的数据进行接收
  props: ['yan']
}
</script>

方法2

最传统的实现子组件修改父组件传递数据的方法:

  1. 父组件声明事件,子组件调用事件修改co。
  2. 父组件通过事件实现co变化,yan就变化,子组件由于响应式,yan自然发生变化。

父组件

<!-- 箭头函数,data就一个参数[data是自定义的],()是否设置都可以,后边语句需要设置{} -->
<com-button :yan="co" @xiugai="data=>{co=data}"></com-button>

子组件

<template>
    <div id="btn">
      <button :style="{color:yan}">我是按钮</button>
      <button @click="$emit('xiugai','purple')">修改</button>
    </div>
</template>

<script>
export default {
  name: 'Button',
  // 对父组件传递过来的数据进行接收
  props: ['yan']
}
</script>

方法3

通过update:xxx的方式给子组件声明事件

父组件

<!-- 事件名称为 update:xxx 的格式,xxx 就是传递给子组件的数据的名称 -->
<com-button :yan="co" @update:yan="data=>{co=data}"></com-button>

子组件

<template>
    <div id="btn">
      <button :style="{color:yan}">我是按钮</button
      <button @click="$emit('update:yan','green')">修改</button>
    </div>
</template>

<script>
export default {
  name: 'Button',
  // 对父组件传递过来的数据进行接收
  props: ['yan']
}
</script>

方法4

通过.sync优化父组件的相关操作,update是固定标志:

父组件

<!-- 通过 [:yan.sync="co"]就是对[:yan="co" @update:yan="data=>{co=data}"]的封装 -->
<com-button :yan.sync="co"  :se.sync="abc"></com-button>

子组件

<template>
    <div id="btn">
        <button :style="{color:yan}">我是按钮</button>
        <button @click="$emit('update:yan','blue')">修改</button>
    </div>
</template>

<script>
export default {
  name: 'Button',
  // 对父组件传递过来的数据进行接收
  props: ['yan']
}
</script>
Vue中,有多种方式可以让组件修改组件传递的值。 一种方式是通过在组件使用`$emit`方法,触发一个自定义事件,并且将修改后的值作为参数传递组件。比如,在组件中定义一个`change`方法,然后通过`this.$emit('update:value', newValue)`来触发名为`update:value`的事件,将新的值`newValue`传递组件。这样组件就可以通过监听`update:value`事件来获取组件修改后的值。 另一种方式是使用`.sync`修饰符。在组件中通过`v-bind`指令将组件的值绑定到组件的属性中,并且使用`.sync`修饰符将组件对该属性的修改同步组件。比如,在组件中将`value`属性传递组件时,我们可以使用`<child-component :value.sync="value"></child-component>`来实现双向绑定。这样组件就可以直接修改`value`属性,并且组件同步更新。 还有一种方式是使用`v-model`指令。在组件中通过`v-model`指令将组件的值绑定到组件的属性中,并且在组件使用`$emit`方法触发名为`input`的事件来更新该属性。比如,在组件使用`<child-component v-model="value"></child-component>`来实现双向绑定。这样组件修改`value`属性时,会自动触发`input`事件,从而更新组件的值。 综上所述,Vue组件可以通过使用`$emit`方法、`.sync`修饰符或`v-model`指令来修改组件传递的值。这些方式都可以实现组件组件之间的双向数据绑定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值