Vue3 v-model自定义修饰符

 
inputcmp.vue (script setup方式):
 
<template>
  <span>{{ msg }}</span>
  <input type="text" :value="modelValue || zs" @input="inputemit" @blur="bluremit" />
</template>
 
<script setup>
let props = defineProps({
  // 带有参数自定义修饰符(args+Modifiers)
  zs: String,
  zsModifiers: {},
  // 自定义修饰符,不带参数(modelModifiers)
  modelValue: String,
  modelModifiers: {
    default: () => ({}),
  },
  msg: {
    type: String,
    default: '输入:'
  }
})
let emit = defineEmits(['update:modelValue', 'update:zs'])
// 变成大写
function inputemit (e) {
  let value = e.target.value;
  if (props.modelModifiers && props.modelModifiers.upperCase) {
    value = value.toUpperCase();
    emit("update:modelValue", value);
  }
}
// 变成大写且加上zs前缀
function bluremit (e) {
  let value = e.target.value;
  if (props.zsModifiers && props.zsModifiers.hasPre) {
    value = 'zs-' + value.toUpperCase();
    emit("update:zs", value);
  }
}
</script>
 
inputcmp.vue (script 方式):
 
<template>
  <input type="text" :value="modelValue || zs" @input="inputemit" @blur="bluremit" />
</template>
 
<script >
export default {
  props: {
    // 带有参数自定义修饰符(args+Modifiers)
    zs: String,
    zsModifiers: {},
    // 自定义修饰符,不带参数(modelModifiers)
    modelValue: String,
    modelModifiers: {
      default: () => ({}),
    },
  },
  methods: {
    // 变成大写
    inputemit (e) {
      let value = e.target.value;
      if (this.modelModifiers && this.modelModifiers.upperCase) {
        value = value.toUpperCase();
        this.$emit("update:modelValue", value);
      }
    },
    // 变成大写且加上zs前缀
    bluremit (e) {
      let value = e.target.value;
      if (this.zsModifiers && this.zsModifiers.hasPre) {
        value = 'zs-' + value.toUpperCase();
        this.$emit("update:zs", value);
      }
    }
  },
};
</script>
 
 
index.vue:
 
<template>
  <v-inputcmp v-model.upperCase="inpvalue1" />
  <br />
  <v-inputcmp v-model:zs.hasPre="inpvalue2" :msg="msg" />
</template>
 
<script setup>
import { ref } from 'vue'
import vInputcmp from './inputcmp.vue'
let inpvalue1 = ref('abc');
let inpvalue2 = ref('zs');
let zs = ref('zs')
</script>
<style></style>
 
 
 
 
 
 
 
 
posted @ 2022-03-02 14:46  菌子乐水  阅读(195)  评论(0编辑  收藏  举报