关于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. HTML元素如何按字符串原格式输出文本换行制表符信息

    只需给相应HTML元素添加 style="white-space: pre"

  2. xshell+ssh+网络+加密

    使用xshell+ssh用于管理linux服务器,大概是目前最为流行的方式. 这个工具和技术涉及到: 计算机网络 加密解密 虽然不是专门的系统工程师,但还是相对频繁使用这套工具,有时候难免遇到一些不知 ...

  3. 服务器上安装centos7系统遇到的坑

    centos7的安装报错"no controller found" 出现no controller found解决方案1.等待命令行出现 2.输入ls /dev/sd*   找到自 ...

  4. 一文带你深入理解SpringMVC的执行原理

    今天大致来看一下Spring MVC的执行流程是什么样的 执行流程:也就是一个请求是怎么到我们Controller的,返回值是怎么给客户端的 本文分析的问题: 文件上传的请求是怎么处理的 跨域是怎么处 ...

  5. 【Grafana】Grafana模板自定义-1-创建选择框

    如何创建选择框 第一步:编辑模板 第二步:配置变量 配置说明: General: [Name]变量名,后面模板中如果要按条件筛选,会用到这个变量名. [Type]类型,目前没仔细研究,使用默认的Que ...

  6. CF1860C 题解

    显然是一个博弈论题,考虑 dp. 定义状态 \(dp_i\) 表示先手走到 \(i\) 之后是否有必胜策略,不难发现以下几点: 若走到 \(i\) 之后无路可走,那么就必败. 若走到 \(i\) 之后 ...

  7. Docker下安装Nginx代理服务器【工作实操版】

    一.Nginx下载 使用命令拉取nginx镜像到本地,此处我们获取排名第一的是官方最新镜像,其它版本可以去DockerHub查询 docker pull nginx 二.先启动一个nginx容器用于c ...

  8. vscode配置项

    因为vscode的默认配置,导致现在用的不是很舒服.总结了以下配置能让你的vscode用着更舒服. 1: 问题: 输入log按tab快速生成代码后,提示居然没了? 解决方案: "editor ...

  9. workman和swoole区别和异同

    swoole是使用C语言实现的socket通信框架,workerman则是使用纯php实现的socket框架,二者进程模型上也存在很多的不同. 先说下swoole的进程模型,看一下以下解析图 mast ...

  10. oeasy教您玩转python - 012 - # 刷新时间

    ​ 刷新时间 回忆上次内容 通过搜索 我们学会 import 导入 time 了 time 是一个 module import 他可以做和时间相关的事情 time.time() 得到当前时间戳 tim ...