vue中子组件修改父子变量报错问题

通过子组件中变量变化 修改父页面中变量报如下错:

  Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. Prop being mutated: "XXX"

解决方案:

1、父页面中 

<template>  
    <train-city @ChangeName="ChangeName" :isData=" isOpen"></train-city>  
<template>  
<script>  
  import TrainCity from "./train-city";  
  export default {  
    name:'index',  
    components: {TrainCity},  
    data () {  
      return {  
        isOpen:false 
      }  
    },  
    methods:{  
      ChangeName(data){   //在子组件触发的事件  
        this.isOpen= data.isOpen;//改变了父组件的值  
      }  
    }  
  }  
</script>

组件中

<template>  
  <div class="stuts">  
    <br/><button @click='select(`true`)'>点击事件</button>  
  </div>  
</template>  
<script>  
  export default {  
    name:'trainCity',  
    props:['isData'], // 用来接收父组件传的值  
    methods:{  
      changeVal(val) {  
        let data = {  
          isOpen: val  
        };  
        this.$emit('ChangeName',data);触发ChangeName事件  
      }  
    }  
  }  
</script>

 

2、如果条件允许可以直接在组件中定义变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue中,组件直接修改组件的数据是不被推荐的,因为Vue遵循单向数据流的原则。但是,你可以通过使用自定义事件来实现组件向父组件传递数据的目的。 具体步骤如下: 1. 在父组件中定义一个数据属性,例如`parentData`。 2. 在组件中,通过`$emit`方法触发一个自定义事件,并传递需要传递给父组件的数据。例如:`this.$emit('eventName', childData)`。 3. 在父组件中监听组件触发的自定义事件,并在触发事件时执行相应的方法。例如:`@eventName="updateParentData"`。 4. 在父组件的方法`updateParentData`中,将组件传递的数据赋值给父组件的数据属性`parentData`。 下面是一个简单的示例代码: ```vue <template> <div> <p>Parent Component: {{ parentData }}</p> <ChildComponent @eventName="updateParentData"></ChildComponent> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentData: '' } }, methods: { updateParentData(childData) { this.parentData = childData; } } } </script> ``` 在组件中,可以通过调用`$emit`方法来触发自定义事件: ```vue <template> <button @click="updateParentData">Update Parent Data</button> </template> <script> export default { methods: { updateParentData() { const childData = 'Child component data'; this.$emit('eventName', childData); } } } </script> ``` 通过以上方式,组件就可以通过触发自定义事件,将数据传递给父组件修改组件的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

易航动效

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

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

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

打赏作者

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

抵扣说明:

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

余额充值