vue3+ts 组件封装,以及如何封装一个v-model双向绑定的值

1.prop
通过defineProps定义该组件的入参,它在初始化时执行一次,参数在组件内是只读的,不能被修改,想要修改它,就必须将它赋值给一个变量,在组件中操作该变量即可。

defineProps({
    value: String,
  });

父组件向子组件传值,可通过:value=“变量”

  1. emit
    通过defineEmits,向外暴露事件,并将值传递向外部,外部通过@change=“”,触发
	const emit = defineEmits([ 'change']); // 声明
	const change = (value) => {
    	emit('change', value);// 在合适的位置暴露出去,将值传递给父组件,也可以添加回调函数,当父组件代码执行完后,返回某个状态或值,子组件接着执行下面的业务逻辑
 	 };
	

3.watch监听器
由于prop的参数只执行一次,当外部的值发生改变时,组件内的值并没有改变,这里需要将值实时监听,并做同步。

import { ref, reactive, watch } from 'vue';

defineProps({
    value: String,
  });
  
const newvalue = ref('') 
watch(() => props.value,
    (newVal, oldVal) => {
      newvalue= newVal;
    }
  );

语法糖,v-model如何实现,vue3中,v-model的命名为modelValue ,我们需要在defineProps中声明一个modelValue的入参,还要在defineEmits中声名update:modelValue,并在合适的位置,向外暴露,

<template>
  <div>
      <a-select :model-value="modelValue" allow-clear @change="change">
      <a-option
        v-for="(item, index) of MODE.data"
        :key="index"
        :value="item.MODEL_NM"
        :label="item.RL_NM"
      />
    </a-select>
  </div>
</template>

<script setup lang="ts">
  import { reactive } from 'vue';
  import { queryModeList } from '@/api/common';

  const MODE = reactive({ data: [] });
  queryModeList({}).then(({ data }) => {
    MODE.data = data.VALUE_LIST;
  });
  const emit = defineEmits(['update:modelValue', 'change']);
  defineProps({
    modelValue: String,
  });

  const change = (value) => {
    emit('update:modelValue', value);
    emit('change', value);
  };
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值