博客:https://fisher-zh.github.io/

在Vue中,我们可以使用prop属性来进行父子组件间的通信,在之前的文章Vue踩坑之路–父子组件通信总结中有介绍过。

但是prop 是单向绑定的,我们无法在组件中直接修改prop传递的属性。

prop 是单向绑定的:当父组件的属性变化时,将传导给子组件,但是不会反过来。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解。
另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你不应该在子组件内部改变 prop。如果你这么做了,Vue 会在控制台给出警告。官方文档解释

当然我们可以通过emit在子组件中触发某些事件从而在父组件中修改该数据,这种方法肯定不是最理想的。

在Vue中,能够进行数据双向绑定的属性,我们应该最先想到的是v-model,绑定input的value值,当我们修改value值的同时能够改变数据。那么我们能不能利用v-model这一特点来实现父子组件间某些数据的双向绑定呢?
当然能! 要不我写这个干什么(逃…)

<div>
  <child v-model="message"></child>
  <!-- 通过v-model将message绑定在child上 -->
</div>
// 子组件
export default {
  name: '',
  props: {
    // 通过value获取绑定message值
    value: {
      type: String,
      default: ''
    }
  },
  data: {
    // 你的数据
  },
  methods: {
    changeMessage() {
      // 通过触发组件的input事件改变message的值,
      // 此时父组件中的message值就改变为你设置的值了
      this.$emit('input', 'your message value')
    }
  }
})
Logo

前往低代码交流专区

更多推荐