Skip to content
本文总阅读量

1、双向绑定

vue
<!-- 父组件 -->
<template>
  <Child v-model="value" />
</template>
<script>
export default {
  data() {
    return {
      value: ''
    }
  }
}
</script>

<!-- 子组件 -->
<template>
  <input v-model="input" />
</template>
<script>
export default {
  props: {
    value: String
  },
  model: {
    prop: 'value', // 指定 v-model 要绑定的参数叫什么名字,来自于 props 中定义的参数
    event: 'change' // 指定要触发的事件名字,将被用于 $emit
  },
  computed: {
    input: {
      get() {
        return this.value
      },
      set(val) {
        this.$emit('change', val) // 触发
      }
    }
  }
}
</script>

vue2.3 之后增加 sync

  • sync 和子组件配合 v-model 使用 computed 的 get set 方法
  • 父组件:v-bind:xxx.sync="xxx"
  • 子组件:props 接收,computed 重定义 get、set
  • get()方法返回 props 的值(避免子组件直接改变值报错)
  • set(val)方法里主动触发更新 this.$emit('update:xxx', val)

2、数据更新

js
tableData: {
  list: []
}

1、vue@2.5.2 this.$set(this.$data, 'tableData', result)

2、vue@2.6 以上list是不会触发更新的 this.$set(this.$data, 'tableData', result)