Vue.js


vue项目使用element-ui组件上传文件报错upload.addEventListener is not a function Mock数据报错的解决方案

分享下使用element-ui组件上传文件时报错upload.addEventListener is not a function Mock的解决方案

我自己的报错有三:

TypeError: p.upload.addEventListener is not a function

TypeError: t.hideProgressDialog is not a function

Uncaught (in promise) cancel chunk-elementUI.b0725dc6.js:9:359832

原因:主要是因为mockjs改动了axios里面XMLHttpRequest对象从而导致报错

解决:

需要查找文件node_modules/mockjs/dist/mock.js以及node_modules/mockjs/src/mock/xhr/xhr.js

找到后打开文件大约在8312行和216行的位置添加以下代码

MockXMLHttpRequest.prototype.upload = xhr.upload

就是给MockXMLHttpRequest对象添加一个原生xhr.upload方法

img

img

实测我只解决了第一个报错,但是功能可以正常用了,就没有去管另外两个报错

el-messageBox自动关闭,关闭方法

showProgressDialog() {
  this.$alert("Uploading File...", "文件上传中", {
    showConfirmButton: false,
    dangerouslyUseHTMLString: true,
    distinguishCancelAndClose: true,
    customClass: "upload-dialog",
  });
},
  updateProgressDialog(progress) {
    const uploadDialog = document.querySelector(".upload-dialog .el-message-box__content");
    // let messageBox = document.getElementsByClassName("upload-dialog");
    uploadDialog.innerHTML = `Uploading File... ${progress}%`;
    if (progress === 100) {
      this.$msgbox.close();   //  el-MessagdeBox 官方的 关闭方法
    }
  },

小技巧

  1. 以下代码可以将列表中的内容渲染成不同等级的 tag 标签类型,学习之处在于其中的内容判断
<el-tag size="small" :type="row.vuln_ranks.includes('高危')
  ? 'danger'
  : row.vuln_ranks.includes('中危')
  ? 'warning'
  : 'info'
  " v-if="row.vuln_ranks && row.vuln_ranks.length">
  {{ row.vuln_ranks && row.vuln_ranks.join(" / ") }}
</el-tag>
  1. 以下代码是将列表中所需要的列表title定义在一个单独的 .js 文件中,一个是节约了位置,提高了可读性
import { column } from "./column";
column: columnm, // 这里的column是一个Array类型

// 下面展示column.js文件
export const column = [
  {...},
  {...}
]

配置后端IP/PROT

在 Vue 2 项目中,可以通过配置 vue.config.js 文件来设置后端访问地址

module.exports = {
  devServer: {
    proxy: {
      '/api': { // 凡是 /api 的请求都向下面的配置请求
        target: 'http://backend.example.com:20010',  // 设置后端接口的访问地址
        changeOrigin: true, // 启用跨域访问
        pathRewrite: {
          '^/api': ''  // 将请求路径中的 '/api' 替换为空字符串
        }
      }
    }
  }
}

尝试前端模拟 ping 命令

尝试1、使用 node.js 中的 ping 模块

官方文档描述:https://www.npmjs.com/package/ping

没有尝试成功

原因:导入命令失败,在 node_model 和 webpack 中可以看到 ping 模块,在组件中使用 var ping = request("ping") 提示 typescript 无法识别模块路径

img

没有继续深入了解,vue 并不支持 require 导入模块的方式,并且 node.js 的 ping 模块 并没有开放前端使用的方式,我看到的都是编写 node.js 使用,和前端使用应该是有一定的区别

尝试2、使用 Image() 函数模拟一个请求

这种方式我看到有人在前端使用,但是并不适用于网关等非网站ip,原理是使用 Image() 向 “Http://ip(dst ip):time(time param)” 发起一个请求,如果返回码200,网络就是联通的

这个文章中也记录了以上这两种方式:https://pythonjishu.com/oqhoimlamskypgy/

尝试未果,准备使用后端模拟 ping IP 然后响应结果

面试题

Console 页面里写代码,统计极客时间官网一共有多少种 HTML 标签

new Set([...document.querySelectorAll('*')].map(n=>n.nodeName)).size

更改代码发现没有编译,没有刷新页面

检查这个页面的代码在 route/index.js 中的位置,看是否没有用上,没有在路由中定义的是没办法加载的,就没办法识别到更改,或者添加文件的大小写有误,总之就检查,修改的目标文件,在 route 中的定义

请求地址不能是127.0.0.1

在 .env.development or .env.production 文件中有 VUE_APP_BASE_API 字段,包括全部代码中的请求后端的API要求是后端服务器的IP,前后端在一起也不能使用127.0.0.1,不然会请求客户端的主机,

element ui 图标偶发乱码

[https://blog.csdn.net/hillwill/article/details/120726742#:~:text=%E4%BB%A5%E4%B8%8B%E6%98%AF%E6%87%92%E4%BA%BA%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%201%E3%80%81%E5%9C%A8main.js%E5%BC%95%E7%94%A8%E5%85%A5%20import%20%27element-ui%2Flib%2Ftheme-chalk%2Ficon.css%27,2%E3%80%81%E5%9C%A8node_modules%5B%26element%26%5D-uipackagestheme-chalksrcbase.scss%E5%8E%BB%E6%8E%89icon.scss%20%E6%9B%B4%E5%A5%BD%E7%9A%84%E6%96%B9%E6%B3%95%E8%AF%A6%E8%A7%81%EF%BC%9A%20%E3%80%90web%E5%89%8D%E7%AB%AF%E3%80%91element-ui%E6%A1%86%E6%9E%B6%E5%9C%A8%E7%BA%BF%E4%B8%8A%E7%8E%AF%E5%A2%83%E5%81%B6%E5%B0%94%E5%87%BA%E7%8E%B0iconfont%E5%9B%BE%E6%A0%87%E4%B9%B1%E7%A0%81%E7%9A%84%E9%97%AE%E9%A2%98%EF%BC%8C%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95%20-%20%E7%AE%80%E4%B9%A6](https://blog.csdn.net/hillwill/article/details/120726742#:~:text=以下是懒人解决方法 1、在main.js引用入 import ‘element-ui%2Flib%2Ftheme-chalk%2Ficon.css’,2、在node_modules[%26element%26]-uipackagestheme-chalksrcbase.scss去掉icon.scss 更好的方法详见: 【web前端】element-ui框架在线上环境偶尔出现iconfont图标乱码的问题,解决办法 - 简书)

日期传时间戳

let dateTime = new Date().getTime();

el-form rules 参数

img

ElementUI中el-form组件的rules参数详解_el-form rules-CSDN博客

rules: {
  age: [
    { required: true, message: '请输入年龄', trigger: 'blur' },  // 检查age字段不能为空
    { type: 'integer', message: '年龄必须是整数', trigger: 'blur' },  // 检查值类型为整型
  { validator: this.validateAge, trigger: 'blur' }
  ]
}

文章作者: Nico
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Nico !
  目录