当前位置: 首页 > news >正文

vue vue3 手写 动态加载组件

效果展示

一、需求背景:

# vue3 项目涉及很多图表加载、表格加载 #考虑手写一个动态加载组件

二、实现思路

通过一个加载状态变量,通过v-if判断,加载状态的变量等于哪一个,动态加载组件内部就显示的哪一块组件。

三、实现效果

四、代码

(一)、封装组件

<template><view class="loadding_contaniers" v-if="loadState == 1"><view class="loading_img"><image src="@/static/images/smartCabin/loadingImg/isLoading_bg.png" /></view><view class="imgTitle">加载中<text id="dot">...</text></view></view><view class="loadding_contaniers" v-else-if="loadState == 2"><view class="loading_img"><image src="@/static/images/smartCabin/loadingImg/isErr_bg.png" /></view><view class="imgTitle">请求失败,请重新加载!</view></view><view class="loadding_contaniers" v-else-if="loadState == 3"><view class="loading_img"><image src="@/static/images/smartCabin/loadingImg/isNone_bg.png" /><!-- <image:src="getAssetsFile(props.noticeTip == '暂无数据'? `smartCabin/loadingImg/isNone_bg.png`: `smartCabin/loadingImg/isErr_bg2.png`)"/> --></view><view class="imgTitle">{{ noticeTip }}</view></view><view class="loadding_sucess" v-else><slot> </slot></view>
</template><script>
export default {props: {// 1:加载中 2:加载失败 3:暂无数据 4:加载成功loadState: Number,noticeTip: {type: String,default: "暂无数据",},},
};
</script><style lang="scss">
.loadding_contaniers {width: 100%;height: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;.loading_img {image {width: 260rpx;height: 260rpx;}}.imgTitle {flex: 1;height: 0;color: #757575;#dot {display: inline-block;width: 1.5em;vertical-align: bottom;overflow: hidden;animation: dotting 0.5s infinite step-start;}@keyframes dotting {0% {width: 0;margin-right: 1.5em;}33% {width: 0.5em;margin-right: 1em;}66% {width: 1em;margin-right: 0.5em;}100% {width: 1.5em;margin-right: 0;}}}
}
.loadding_sucess {width: 100%;height: 100%;display: flex;justify-content: center;align-items: center;
}
</style>

 (二)、组件传参

h5使用

<LoaddING :loadState="4" :noticeTip="'当loadState是成功的时候'"><view class="myContent"><imagesrc="@/static/images/energy/elePower/receiving_power.png"/></view>
</LoaddING>

web端使用 

<LoaddING :loadState="data.isFinish" :noticeTip="data.isTips"><!-- 插槽组件 --><ewClickLine:yAxisUnit="echartData2.unit":seriesColor="echartData2.color":legend="{ show: true, x: '80%' }":seriesName="echartData2.name":seriesType="echartData2.chartSeriesType":xAxisValue="echartData2.lineXAxisValue":nums="echartData2.lineNums"></ewClickLine>
</LoaddING>

相关文章:

  • SQL注入sqli_labs靶场第五、六题
  • 嵌入式:第一天(c语言入门)
  • 基于Java+SpringBoot+Vue实验室安全考试系统(源码+文档+部署+讲解)
  • Linux函数学习 fork
  • RabbitMQ3.13.x之六_RabbitMQ使用场景
  • 【算法-数组】二分查找法
  • (27)4.8 习题课
  • 深入浅出 -- 系统架构之微服务架构选型参考图
  • 数字化智慧养老:引领老年人融入科技时代新生活
  • Ant Design Vue 表单验证手机号的正则
  • c#编程基础学习之方法
  • maven: 标签总结
  • 雄安建博会:中矿雄安新区的总部开工建设
  • Windows下docker-compose部署DolphinScheduler
  • 【原创】springboot+vue校园疫情防控管理系统设计与实现
  • Google 是如何开发 Web 框架的
  • CSS 专业技巧
  • Debian下无root权限使用Python访问Oracle
  • Docker入门(二) - Dockerfile
  • dva中组件的懒加载
  • FineReport中如何实现自动滚屏效果
  • Redux 中间件分析
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Webpack 4x 之路 ( 四 )
  • 构建二叉树进行数值数组的去重及优化
  • 前端学习笔记之观察者模式
  • 悄悄地说一个bug
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 主流的CSS水平和垂直居中技术大全
  • - 转 Ext2.0 form使用实例
  • 《天龙八部3D》Unity技术方案揭秘
  • (1)bark-ml
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (二)c52学习之旅-简单了解单片机
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (四)汇编语言——简单程序
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)ABI是什么
  • (转)c++ std::pair 与 std::make
  • (转)memcache、redis缓存
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 发展历程
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET开发不可不知、不可不用的辅助类(一)
  • .Net中的集合
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解