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

徐州市工程建设交易平台手机优化软件排名

徐州市工程建设交易平台,手机优化软件排名,c 网站开发需要学什么,工作场所的职业病危害因素强度或者浓度应当符合Vue开发一个导入数据的组件&#xff0c;以下具体说明整个流程和相关知识点 需求是开发一个数据导入组件&#xff0c;此组件是一个公共组件&#xff0c;而且是个常用组件&#xff0c;在很多功能页面上都会用到。 1.导入文件组件 开发 <template><div class"con…

Vue开发一个导入数据的组件,以下具体说明整个流程和相关知识点

需求是开发一个数据导入组件,此组件是一个公共组件,而且是个常用组件,在很多功能页面上都会用到。

1.导入文件组件 开发

<template><div class="content"><div class="item"><span style="color: red">*</span><span style="padding-right: 10px">选择文件</span><input ref="excel-upload-input" class="excel-upload-input" type="file" accept=".xlsx, .xls"@change="handleClick" /><el-button icon="el-icon-upload2" @click="uploadFile">上传</el-button><div style="padding: 10px 10px 0 60px"><span v-if="rawFile" style="padding-left: 10px; color: #1890ff" @click="openFile">{{ rawFile.name }}</span><span v-if="rawFile" style="padding-left: 5px; cursor: pointer" @click="cancelFile"><iclass="el-icon-delete"></i></span></div></div><div class="item download"><span style="cursor: pointer" @click="downloadMdule">EXCEL模板下载</span></div><div class="item"><p>注意</p><p>1、数据应该严格按照模板样式填写</p><p>2、导入模板中带*号字段均要填写</p></div><div style=" display: flex; justify-content: flex-end; padding-top: 10px;width: 100%;  "><el-button @click="close">取 消</el-button><el-button type="primary" @click="submit" :loading="loading">确 定</el-button></div></div>
</template><script>
export default {name: 'importWork',data() {return {rawFile: null,loading: false};},props: {tempUrl: "",},methods: {downloadMdule() {window.open(this.tempUrl, "_blank");},uploadFile() {this.$refs["excel-upload-input"].click();},// 上传的文件handleClick(e) {console.log(e);const files = e.target.files;const rawFile = files[0]; // only use files[0]const isSizeValid = rawFile.size / 1024 <= 100; // Maximum size: 500kif (!isSizeValid) {this.errorTip("文件过大,不能超过100k");return;}if (!rawFile) return;this.upload(rawFile);},upload(file) {this.rawFile = file;console.log(file);},async submit() {if (!this.rawFile) {this.errorTip("请上传文件");return;}const formData = new FormData();formData.append("file", this.rawFile);this.loading = true;this.$emit("handle", formData, (res) => {this.loading = false;this.successTip(res.message);this.$emit("reload");this.rawFile = null;this.$refs["excel-upload-input"].value = "";});},close() {this.$emit("close");},cancelFile() {this.rawFile = null;this.$refs["excel-upload-input"].value = "";},}
}
</script>
<style lang="scss" scoped>
.content {padding: 0 20px;.excel-upload-input {display: none;z-index: -9999;}.item {padding: 10px 0;}.download {color: #1890ff;display: flex;justify-content: space-between;}
}
</style>

代码分析:

  • template 和 style 部分略过,这就是普通的上传文件Html的结构,如果这一块不会,那就去补习HTML

  • script 里面涉及到几个知识点:

    • props父组件向子组件传递数据的一种机制
      • 通过 props,父组件可以将数据传递给子组件,子组件则可以接收并使用这些数据。
      • 此处我接收的是一个 导入模版的字段,导入模版是啥,不解释
    • this.$refs["excel-upload-input"].click()
      • this.$refs 是一个用于直接访问 DOM 元素或子组件实例的对象。
      • 使用 this.$refs["excel-upload-input"].click() 时,通过 ref 属性获取 隐藏的上传文件输入框 元素,并手动触发它的 click 事件。
    • handleClick 方法 是文件框有变化时触发的,我这里是检测文件大小,实际上可以检测文件格式等等。
      • 方法内,最后将上传文件的对象,赋值给 rawFile 属性,方便后面调用
    • this.$emit("handle", formData, (res) => {...} 很重要, 很重要, 很重要
      • this.$emit子组件向父组件传递事件和数据的一种方式。
      • 通过 $emit,子组件可以触发一个自定义事件,并传递数据给父组件,父组件则可以监听这个事件并做出相应的处理。
        • 由于导入数据的功能肯定是每个父组件独立的功能,很少情况下,所有上传数据会请求到同一接口,但不排除这种情况,此处不做计较
        • 此次导入数据的逻辑就是,上传组件只负责上传,处理数据是父组件自己处理,然后将结果给上传组件,上传组件根据结果,来显示成功和失败。
      • handle 是父组件的定义的事件,后续会说明。
      • formData 是传递的数据
      • (res) => {} 是回调函数,父组件在处理完事件后调用该回调函数并传递结果。父组件使用,会在下面展示。

其他的相关代码,不做解释,都是常规操作

2.调用方,即父组件 调用

  <el-dialog title="批量导入" :visible.sync="importDataDialog.dialogVisible" width="1000px" :close-on-click-modal="false"><importData v-if="importDataDialog.tempUrl" @close="closeImportData" @handle="handleImportData"@reload="reloadImportData" ref="importDataRef" :tempUrl="importDataDialog.tempUrl"></importData></el-dialog><script>//处理批量导入async handleImportData(formData, callback) {console.log(formData)let res = await importOrderData(formData);callback(res);},
</script>

父组件调用就很简单了

  • importDataDialog.tempUrl 是模版url,我用if 判断,如果没值,上传组件不加载,因为需求是必须让用户先下载模版
  • :tempUrl="importDataDialog.tempUrl" 即父组件给子组件传递数据,子组件用props 获取
  • @handle 父组件监听事件,等待子组件的调用
  • handleImportData 是父组件监听后,处理上传数据的方法
    • Vue.js 中,async 和 await 是 JavaScript 中用于处理异步操作的语法糖。可以使用 async 和 await 来处理异步操作,比如 API 请求、定时器等。
    • 上传数据处理完成后,返回结果res 通过 回调函数 callback 传统数据
    • callback 接收到数据,进行相应的判断,提示等等逻辑

上述一个最简单的公用上传组件开发完成,接下来就是调试。然后根据用户需求,继续完善优化组件。

http://www.dtcms.com/wzjs/296301.html

相关文章:

  • 网站怎么做排查修复seo的名词解释
  • 学校网站建设工作方案企业内训机构
  • ui做自适应网站培训网站排名
  • ps怎么做网站导航内嵌式深圳网站搜索优化工具
  • 电子商务网站建设考试重点东莞做网站的联系电话
  • 做金融网站看那些素材化工网站关键词优化
  • 福州企业做网站2022年十大网络流行语发布
  • 免费网店有哪些平台百度seo软件优化
  • 简洁大气的网站模板长沙网站关键词排名
  • 如何分析企业网站怎么制作网站平台
  • 电商型网站开发多少钱怎么做网络销售
  • 17. 整个网站建设中的关键是搜索引擎优化的概念是什么
  • 汕头模版网站建设seo优化网站推广全域营销获客公司
  • 卫浴响应式外贸网站建设电商网站商品页的优化目标是什么
  • wordpress+centos6搜索优化师
  • 外销网站有哪些广州网站推广服务
  • 做网站所需技术今日重大军事新闻
  • 企业内网网站外贸企业网站推广
  • 美术网站建设网站开发与设计
  • 做网站建设的名声很差吗新闻摘抄2022最新20篇
  • 无锡网络推广方案服务seo优化的基本流程
  • 虚拟主机如何做网站全媒体广告策划营销
  • 深圳做网站公司有哪些seo快排
  • 华为网站的建设建议seo是什么简称
  • 网站备案表是什么苏州网站关键词优化推广
  • 网站没有设置关键词电脑优化软件
  • 石景山区住房城乡建设委网站精准粉丝引流推广
  • 手机网站建设设计公司百度站长工具查询
  • 白酒网站设计app开发制作
  • 哪些网站可以做设计赚钱百度推广登陆平台登录