vue组件.sync修饰符的使用

186 阅读1分钟

子组件修改父组件数据的语法糖

父组件给子组件传值通过props,子组件改变父组件的数据通过事件this.$emit('事件名','值')

父组件

<template>
  <div>
    <child :data="data" :click="handleClick" />
  </div>
</template>

<script>
import child from "./child";
export default {
components: {
    child
  },
  data() {
    return {
      data: "修改前"
    };
  },
  methods: {
    handleClick(val) {
      this.data = val
    }
  }
};
</script>

子组件

<template>
  <div>
    {{ data }}
    <el-button @click="handleClick">点击修改</el-button>
  </div>
</template>

<script>
export default {
  props: {
    data: {
      type: String,
      default: () => ""
    }
  },
  methods: {
    handleClick() {
      this.$emit("click", "修改后");
    }
  }
};
</script>

使用.sync修饰符父组件中

<child :data.sync="data" />

会被扩展为

<child :data="data" @update:data="val => data = val"/>

子组件中

this.$emit("update:data", "修改后")