关于Vue + element plus包装Component理解

一、关于编写思路

我以设计el-select选择框进行举例说明

父组件与Component传递params与Function使用Props传递,Component使用计算属性computed实现父组件modelValue与子组件modelValue值一致

二、父组件调用时代码编写

父组件所需要进行引入所包装组件、向其传入参数以及方法

<template>
<Component
ref="componentRef"
v-model="data"
:params="params"
:api="queryApi"
/>
</template> <script lang="ts" setup>
// 将组件引入父组件
import Component from '组件路径'
// 父组件绑定数据
const data = ref(Class T) // 定义组件Ref 以便能够使用组件抛出的Function、data
const componentRef = ref() // 函数查询时所用参数
const params = ref(Class T) // 父组件一个获取数据函数 函数由调用父组件定义以便后续调用时能够进行通用
const queryApi = () => { }
</script>

三、包装组件代码编写

<template>
<el-select
v-model="data"
clearable
style="width: 100%"
value-key="key"
>
<el-option
v-for="item in optionList"
:value="item"
:label="item.label"
:key="item.key"
/>
</el-select>
</template> <script setup lang="ts">
// 引入一个默认查询方法
import query from '查询方法路径'
// 一个名为 update:modelValue 的事件,当本地 ref 的值发生变更时触发。
const emit = defineEmits(['update:modelValue']) // 声明Props 组件才能知道父组件使用props传递来的数据
const props = defineProps({
// 父组件调用组件时 v-model 绑定的属性值
modelValue: {
default: () => null,
type: Object,
},
// 父组件传递进来的api
api: {
default: () => null,
type: Function,
},
// 父组件传递进来查询参数
params: {
default: () => null,
type: Object,
},
// 初始化加载
requestAuto: {
default: () => true,
type: Boolean,
},
} // 选择框option列表
const optionList = ref() const data = computed({
// 当访问到data数据时调用,会获取父组件传递过来的属性值modelValue,并返回modelValue
get: () => {
return props.modelValue
},
// 当data数据被赋值时调用,data赋值val,通过emit方法触发了update:modelValue事件,将新的值val传递给父组件
set: (val) => {
emit('update:modelValue', val)
},
}) // 编写加载选项列表函数
const loadOptions = () => {
// 判断是都有方法传入
if(api){
api(props.params).then(res => { }).catch(err => { }).finally(() => { }
}else{
query(props.params).then(res => { }).catch(err => { }).finally(() => { }
}
} // 是否进行初始化加载
props.requestAuto && loadData() // 使用defineExpose 将组件方法、属性暴露给父组件 在不自动加载时能够进行加载数据
defineExpose({ loadOptions })
</script>

关于Vue + element plus包装Component理解的更多相关文章

  1. 循序渐进VUE+Element 前端应用开发(26)--- 各种界面组件的使用(2)

    在我们使用Vue+Element开发前端的时候,往往涉及到很多界面组件的使用,其中很多直接采用Element官方的案例即可,有些则是在这个基础上封装更好利用.更少代码的组件:另外有些则是直接采用第三方 ...

  2. 循序渐进VUE+Element 前端应用开发(17)--- 菜单资源管理

    在权限管理系统中,菜单也属于权限控制的一个资源,应该直接应用于角色,和权限功能点一样,属于角色控制的一环.不同角色用户,登录系统后,出现的系统菜单是不同的.在VUE+Element 前端中,我们菜单结 ...

  3. 封装Vue Element的form表单组件

    前两天封装了一个基于vue和Element的table表格组件,阅读的人还是很多的,看来大家都是很认同组件化.高复用这种开发模式的,毕竟开发效率高,代码优雅,逼格高嘛.虽然这两天我的心情很糟糕,就像& ...

  4. 循序渐进VUE+Element 前端应用开发(20)--- 使用组件封装简化界面代码

    VUE+Element 前端应用,比较不错的一点就是界面组件化,我们可以根据重用的指导方针,把界面内容拆分为各个不同的组合,每一个模块可以是一个组件,也可以是多个组件的综合体,而且这一个过程非常方便. ...

  5. 基于vue(element ui) + ssm + shiro 的权限框架

    zhcc 基于vue(element ui) + ssm + shiro 的权限框架 引言 心声 现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目 ...

  6. 【vue】vue +element 搭建及开发中项目中,遇到的错误提示

    1. import Layout from '@/views/layout/Layout'; export default [ { // 配置路由,当路径为'/activePublic',使用组件ac ...

  7. 前端小菜鸡使用Vue+Element笔记(一)

    关于使用Vue+Element的项目简介~ 最近因为项目组缺前端人员,所以自己现学现做页面,先把前后台功能调通 觉得前端可真的是不容易呀哎呀~ 首先记录一下相关的Vue入门的教程: vue环境搭建示例 ...

  8. vue+element ui 的表格列使用组件

    前言:工作中用到 vue+element ui 的前端框架,有这个场景:很多表格的列有许多一样的,所以考虑将列封装为组件.转载请注明出处:https://www.cnblogs.com/yuxiaol ...

  9. Vue源码学习二 ———— Vue原型对象包装

    Vue原型对象的包装 在Vue官网直接通过 script 标签导入的 Vue包是 umd模块的形式.在使用前都通过 new Vue({}).记录一下 Vue构造函数的包装. 在 src/core/in ...

  10. vue+element 实现商品sku效果

    在网上搜索了很久,没有发现合适sku编辑的文章,只能自己写一个vue+element 的sku编辑功能.实现的效果如下图 除成本.售价.库存.货号这几个写死的属性外,可自行添加/删除商品属性,自行添加 ...

随机推荐

  1. 反模式 DI anti-patterns

    反模式 DI anti-patterns 反模式DI anti-patterns <Dependency Injecttion Prinsciples,Practices, and Patter ...

  2. python重拾基础第四天

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1. 列表生成式,迭代器&生成器 列表生成式 我现在有个需求, ...

  3. 高通UEFI中的I2C的方式读取TP的id

    高通UEFI中的I2C的方式读取TP的id 原文:https://blog.csdn.net/mengluoxixiang/article/details/100103347 老规矩,先说要实现的功能 ...

  4. Java模拟高并发测试

    线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.u ...

  5. centos7中的nohup和&的用法和区别

    1.&和nohup的区别 &的意思是在后台运行, 意思是说, 当你在执行 ./start.sh & 的时候, 即使你用ctrl C, 那么start.sh照样运行(因为对SIG ...

  6. joigsc2022_e 题解

    翻译 有长度为 \(n\) 的序列 \(a\) 和 \(L\),你需要对于每个 \(x \in[1,n]\) 求出若把第 \(x\) 个数到第 \(n\) 个数依次装入容量为 \(L\) 的箱子中(每 ...

  7. MFC基于对话框工程笔记->新建MFC对话框

    一.前言 最近用MFC做了一个对话框小工具,学到了很多知识,现在做一下总结,以作备忘.(如有不足,后期添加修改) 二.MFC使用->新建MFC对话框 操作环境:VS2010 主要使用语言:C.C ...

  8. 洛谷P1063

    [NOIP2006 提高组] 能量项链 题目描述 在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链.在项链上有 \(N\) 颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着 ...

  9. 拯救SQL Server数据库事务日志文件损坏的终极大招

    拯救SQL Server数据库事务日志文件损坏的终极大招 在数据库的日常管理中,我们不可避免的会遇到服务器突然断电(没有进行电源冗余),服务器故障或者 SQL Server 服务突然停掉, 头大的是l ...

  10. Raid0创建

    实验步骤 步骤1: 确认硬盘 确认你的硬盘设备名. [root@servera ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 ...