子组件向父组件传值,子组件用到了v-modle,如何让父组件不因为子组件的改变而改变
时间: 2023-09-17 20:06:29 浏览: 86
如果一个子组件用到了v-model双向绑定,那么当子组件改变了绑定的值时,父组件也会跟着改变。如果你不想让父组件因为子组件的改变而改变,你可以在父组件中使用一个计算属性来接收子组件传递的值,然后在计算属性中对这个值进行处理,最后再将处理后的值传递给子组件。
举个例子,假设子组件是一个输入框,父组件中有一个计算属性来接收子组件的值,并且将这个值转换成大写字母:
```html
<!-- 子组件 -->
<template>
<input type="text" v-model="inputValue">
</template>
<script>
export default {
data() {
return {
inputValue: ''
}
},
watch: {
inputValue(newValue) {
this.$emit('input', newValue)
}
}
}
</script>
<!-- 父组件 -->
<template>
<div>
<child-component v-model="parentValue"></child-component>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ChildComponent
},
computed: {
parentValue: {
get() {
return this.$store.state.value // 假设使用 Vuex 来管理状态
},
set(newValue) {
this.$store.commit('setValue', newValue.toUpperCase())
}
}
}
}
</script>
```
在这个例子中,子组件通过watch监听输入框的值的变化,并通过$emit方法将变化后的值传递给父组件。父组件中使用了一个计算属性parentValue来接收子组件传递的值,并且在set方法中将这个值转化为大写字母后再存入状态管理器中。这样,无论子组件的值如何变化,父组件对状态管理器中存储的值做出的处理不会受到影响。
阅读全文