Vue.js专区

Vue.js 2 修改父组件Prop的问题

2016-12-07  本文已影响785人  陈凯利

在vue 2中,子组件的Component是不能随意的对父组件的Prop进行修改的。

// Parent.vue
<template>
  <child :test="test"></child>
</tempalte>
<script>
import Child from './child'
module.exports = {
  components: {Child},
  data: function () {
    return {
        test: 'some string'
    }
  }
}
</script>

// Child.vue
<template>
    <div> {{ test }} </div>
</tempalte>
<script>
import Child from './child'
module.exports = {
  props: ['test'],
  mounted: function () {
    this.test = 'other string'    // Vue warning!! 会提醒不要修改父组件的Component!!
  }
}
</script>

这样的限制真的很不方便啊,经常把变量传到子组件。
官方给出的方法是使用事件响应机制进行修改,但是这样十分的绕。

折腾几天,发现一个曲线的解决办法:传递对象,需要进行修改的变量属于对象内的一个实例变量:

// Parent.vue
<template>
  <child :test="test"></child>
</tempalte>
<script>
import Child from './child'
module.exports = {
  components: {Child},
  data: function () {
    return {
        test: {
          _: 'some string'
        }
    }
  }
}
</script>

// Child.vue
<template>
    <div> {{ test._ }} </div>
</tempalte>
<script>
import Child from './child'
module.exports = {
  props: ['test'],
  mounted: function () {
    this.test._ = 'other string'    // OK.可以对传递过来的对象进行修改
  }
}
</script>

上一篇下一篇

猜你喜欢

热点阅读