Vue 子组件修改父组件传递过来的值

1. 常用的方法

一般通过子组件修改父组件传递过来的值,我们就会采用props和$emit进行单向数据绑定

父组件:

<template>
    <div>
   		<test :value="value" @change="change"></test>
    </div>
</template>

<script>
import test from '@/components/test.vue'
export default {
	components: {
        test
    },
    data() {
        return {
        	value: '父组件的值'
        };
    },
    methods: {
        change (value) {
            this.value = value
        }
    }
}
</script>

子组件:

<template>
    <div>
    	<div>{{ value }}</div>
    	<button @click="change">改变父组件的值</van-button>
    </div>
</template>

<script>
export default {
    props: {
        value: {
            type: String
        }
    },
    methods: {
        change () {
            this.$emit('change', '子组件调用父组件的change方法修改的')
        }
    },
};
</script>

2. 通过.sync修饰符在子组件中修改

父组件:

<template>
    <div>
   		<test :value.sync="value"></test>
    </div>
</template>

<script>
import test from '@/components/test.vue'
export default {
	components: {
        test
    },
    data() {
        return {
        	value: '父组件的值'
        };
    }
}
</script>

子组件:

<template>
    <div>
    	<div>{{ value }}</div>
    	<button @click="change">改变父组件的值</van-button>
    </div>
</template>

<script>
export default {
    props: {
        value: {
            type: String
        }
    },
    methods: {
        change () {
            this.$emit('update:value', '在子组件中修改父组件的值')
        }
    },
};
</script>

3. 使用v-model双向数据绑定

父组件:

<template>
    <div>
   		<test v-model="value"></test>
    </div>
</template>

<script>
import test from '@/components/test.vue'
export default {
	components: {
        test
    },
    data() {
        return {
        	value: '父组件的值'
        };
    }
}
</script>

子组件:

<template>
    <div>
    	<div>{{ value }}</div>
    	<button @click="change">改变父组件的值</van-button>
    </div>
</template>

<script>
export default {
    props: {
        value: {
            type: String
        },
    },
    model: {
    	prop: 'value',
    	event: 'changes'
    }
    methods: {
        change () {
            this.$emit('changes', '在子组件中修改父组件的值')
        }
    },
};
</script>
  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
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`指令来修改组件传递。这些方式都可以实现组件组件之间的双向数据绑定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值