使用v-model

<!-- 父组件 -->
<template>
  <div>
    <city-component v-model="selectedCity"></city-component>
  </div>
</template>

<!-- 子组件 City/index.vue -->
<template>
  <div>
    <el-cascader
      v-model="innerValue"
      :options="options"
      :props="{ expandTrigger: 'hover', value: 'area_code', label: 'name' }"
      @change="handleChange"
    ></el-cascader>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Array,
      default: () => []
    }
  },
  computed: {
    innerValue: {
      get() {
        return this.value
      },
      set(val) {
        this.$emit('input', val)
      }
    }
  },
  methods: {
    handleChange(value) {
      this.$emit('input', value)
    }
  }
}
</script>

使用sync修饰符

<!-- 父组件 -->
<template>
  <div>
    <city-component :selected.sync="selectedCity"></city-component>
  </div>
</template>

<!-- 子组件 City/index.vue -->
<template>
  <div>
    <el-cascader
      v-model="value"
      :options="options"
      :props="{ expandTrigger: 'hover', value: 'area_code', label: 'name' }"
      @change="handleChange"
    ></el-cascader>
  </div>
</template>

<script>
export default {
  props: {
    selected: {
      type: Array,
      default: () => []
    }
  },
  data() {
    return {
      value: this.selected
    }
  },
  methods: {
    handleChange(value) {
      this.$emit('update:selected', value)
    }
  }
}
</script>

使用 provide/inject:

<!-- 父组件 -->
<template>
  <div>
    <city-component></city-component>
  </div>
</template>

<script>
export default {
  provide() {
    return {
      setCity: (value) => {
        this.selectedCity = value
      }
    }
  },
  data() {
    return {
      selectedCity: []
    }
  }
}
</script>

<!-- 子组件 City/index.vue -->
<template>
  <div>
    <el-cascader
      v-model="value"
      :options="options"
      :props="{ expandTrigger: 'hover', value: 'area_code', label: 'name' }"
      @change="handleChange"
    ></el-cascader>
  </div>
</template>

<script>
export default {
  inject: ['setCity'],
  methods: {
    handleChange(value) {
      this.setCity(value)
    }
  }
}
</script>
Last modification:May 27, 2025
反正也没人会打赏