vue3、element plus自定义组件

1、自定义组件绑定v-model。在自定义组件上绑定v-model,在组件内部被展开成两个部分:

/**
*组件使用处代码,别忘了引入
*/
<bus-selector v-model="searchForm.bus" />


/**
*组件内代码
*/
<template>
    <!-- handlerChanged($event) -->
    <!-- $emit('update:modelValue', $event) -->
    <el-select 
        v-model="selectValue"
        clearable
        filterable
        @change="$emit('update:modelValue', selectValue)" 
        value-key="id"
        placeholder="请选择车辆">
            <el-option v-for="item in options" :key="item.id" :label="item.outerPlate" :value="item" />
    </el-select>
</template>
  
<script lang="ts" setup>
import { ref, onMounted, type Ref, toRefs,onUpdated } from 'vue';
import axios from 'axios';
import { httpErrBox } from '@/tools/CommonTool';
import { Bus } from '@/clas/Bus';


//接收父组件v-model传递过来的值,并引入修改方法update:modelValue
const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])

//el-select的v-model不能绑定prop属性,所以定义本地变量一个
//并且change事件中需要将这个值传递给更新方法,即update:modelValue
const selectValue = ref(props.modelValue);
//加入下面这行代码,是为了解决选择改变后显示不更新的问题
onUpdated(()=>{
    selectValue.value = props.modelValue;
})

//定义数据源,并从服务器获取数据
let options = ref(new Array<Bus>);
onMounted(()=>axios.get("/api/bus/all")
    .then(response=>{
        options.value = response.data;
    }).catch(err=>{
        httpErrBox(err,"加载Bus选择器数据出错")
    }))

</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值