自定义v-model

295 阅读1分钟

自定义 v-model

Vue2 自定义v-model

参考文档

// CustomVModel.vue
<template>
  <div class="search">
    <el-input
      type="text"
      placeholder="请输入搜索内容"
      v-model="text"
      @input="inputHandle">
    </el-input>
  </div>
</template>

<script>
export default {
  name: 'Search',
  model: {
    prop: 'searchValue',
    event: 'change'
  },
  props: {
    searchValue: String
  },
  data() {
    return {
      text: ''
    }
  },
  watch: {
    searchValue: {
      immediate: true,
      handler(val) {
        this.text = val;
      }
    }
  },
  methods: {
    inputHandle() {
      this.$emit('change', this.text)
    }
  }
}
</script>

<style scoped>
.search{

}
</style>

// 使用
<CustomVModel v-model="" />

Vue3 自定义 v-model

参考文档

// CustomVModel.vue
<template>
  <input type="text"
    :value="foo"
    @input="$emit('update:foo', $event.target.value)"
  >
</template>

<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
  name: 'CustomVModel',
  props: {
    foo: String
  }
})
</script>

<style scoped>

</style>

// 使用
<template>
  <CustomVModel v-model:foo="inputValue"></CustomVModel>
  {{inputValue}}
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue'
import CustomVModel from './../components/CustomVModel.vue'

export default defineComponent({
  name: 'Home',
  components: {
    CustomVModel
  },
  setup () {
    const inputValue = ref()
    return {
      inputValue
    }
  }
})
</script>

<style scoped>

</style>