前端项目中常用JS方法封装分享

news/2024/7/19 15:47:23 标签: javascript, js, vue.js

写在前面

我在写项目时,会把经常用到的方法专门用一个JS文件来管理,下面是我项目中经常用的一些方法
1、日期格式化(时间戳转年月日时分秒);
2、千分位格式化(10000转10,000);
3、Element UI前端el-table前端导出;
4、两个数组对象去重;
5、后端返回数据流前端下载方法;
6、富文本标签过滤(去除HTML标签)
7、WEB复制到剪贴板功能
6、判断是不是JSON字符串

一、日期格式化

在实际项目中,后端返回时间基本都是以时间戳的格式,我们前端拿到肯定是要转换成相应的年月日时分秒格式的,以下是方法:

1、对Date的扩展:新建js文件,并全局引入

javascript">Date.prototype.Format = function (fmt) { // author: meizz
  const DateObjs = {
    'M+': this.getMonth() + 1, // 月份
    'd+': this.getDate(), // 日
    'h+': this.getHours(), // 小时
    'm+': this.getMinutes(), // 分
    's+': this.getSeconds(), // 秒
    'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
    S: this.getMilliseconds() // 毫秒
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (var key in DateObjs) {
    if (new RegExp('(' + key + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (DateObjs[key]) : (('00' + DateObjs[key]).substr(('' + DateObjs[key]).length)))
  }
  return fmt
}

2、封装常用时间方法:将时间戳转换成指定格式时间

javascript">export const dateFilter = (time, format = 'yyyy-MM-dd hh:mm:ss') => {
  return time ? new Date(time).Format(format) : ''
}
// 使用方法
dateFilter(时间戳, 'yyyy年MM月dd日 hh:mm:ss')

二、千分位格式化

即:1000000 => 1,000,000,这个比较简单,以下是方法:

javascript">// 千分位数字
export const numberFormat = (number) => number.toLocaleString()
// 使用方法
numberFormat(1000000)

三、Element UI前端el-table前端导出

前端导出速度更快,体验更好

1、安装三个依赖包
npm install -S file-saver
npm install -S xlsx
npm install -D script-loader

2、把Blob.js和 Export2Excel.js这两个文件放到项目中
百度云链接: https://pan.baidu.com/s/1sXMEce5MbTOvgf1yFvd5IQ
密码: qvi7
*此链接转载自@一条小鲨鱼

3、封装

javascript">// 导出
export const exportTable = (columns, list, name = '未命名') => {
  return new Promise((resolve, reject) => {
    var columnNames = []
    var columnValues = []
    for (var i = 0; i < columns.length; i++) {
      columnNames[i] = columns[i].label
      columnValues[i] = columns[i].prop
    }
    require.ensure([], () => {
      const { exportJsonToExcel } = require('./Export2Excel')
      const tHeader = columnNames
      const filterVal = columnValues
      const data = list.map(v => filterVal.map(j => v[j]))
      exportJsonToExcel(tHeader, data, name)
      resolve()
    })
  })
}

4、使用

javascript">// 声明要导出的字段
const columns = [
  { prop: 'userName', label: '姓名' },
  { prop: 'userPwd', label: '密码' },
  { prop: 'sex', label: '性别' },
  { prop: 'school', label: '学校' }
]
// 调用方法,三个参数:(要导出的字段,后台返回的数据,文件名字)
// data数据格式:
exportTable(columns, data, '文件名').finally(data => {
  // 导出成功要做的事情
})

四、两个数组对象去重

javascript">// 方法
export const filterTwoArray = (arr1, arr2, key) => {
  if (arr1.length && arr2.length) {
    return arr1.filter(x => arr2.every(y => y[key] !== x[key]))
  } else {
    return []
  }
}

五、后端返回数据流前端下载方法

实际项目中后台接口有可能是返回一个文档流的方式,前端下载需要处理一下

1、方法封装

javascript">// 下载文件
export const downFile = (file, fileName) => {
  return new Promise((resolve, reject) => {
    const blob = new Blob([file], { type: 'application/xls' }) // data就是接口返回的文件流了
    const link = document.createElement('a') // 生成一个a标签。
    link.href = window.URL.createObjectURL(blob) // href属性指定下载链接
    link.download = fileName // dowload属性指定文件名
    link.click() // click()事件触发下载
    resolve()
  })
}

2、使用方法

javascript">// 请求接口
// *注意:如果后端返回的文档流格式,前端请求接口时需要传递参数responseType: 'blob'
downloadFile().then(data => {
  // data为后端返回的文档流,第二个参数为文件名字
  downFile(data, '成绩导入模版.xls')
})

六、富文本标签过滤

去除富文本中的HTML标签

javascript">// 富文本过滤
export const textFormat = (text) => {
  if (!text) return
  text = text.replace(/&nbsp;/g, '')
  text = text.replace(/(\n)/g, '')
  text = text.replace(/(\t)/g, '')
  text = text.replace(/(\r)/g, '')
  text = text.replace(/<\/?[^>]*>/g, '')
  text = text.replace(/\s*/g, '')
  return text
}

七、WEB复制到剪贴板功能

javascript">export const copyText = (text, cb) => {
  // 数字转换成字符串
  text = typeof text === 'number' ? text.toString() : text
  const textarea = document.createElement('textarea')
  textarea.value = text
  textarea.readOnly = 'readOnly'
  document.body.appendChild(textarea)
  textarea.select()
  textarea.setSelectionRange(0, text.length)
  document.execCommand('copy')
  textarea.remove()
  cb()
}

八、判断是不是JSON字符串

javascript">export const isJSON = (str) => {
  if (typeof str === 'string') {
    try {
      JSON.parse(str)
      return true
    } catch {
      return false
    }
  } else {
    return false
  }
}

此条博客会一直更新,有新的方法会一直添加,大家多多关注哦!
觉得有用就给我点个赞吧,蟹蟹,(●ˇ∀ˇ●)
个人联系方式(添加请备注):
QQ:332983810
微信:hu_jiliang


http://www.niftyadmin.cn/n/1410424.html

相关文章

Xendesktop配置高可用DDC

桌面虚拟化产品目前主要的是Citrix的Xendesktop&#xff0c;VMware的View两大产品。今天主要介绍Xendesktop产品&#xff0c;关于View以后有机会了再做介绍。 关于Xendesktop的网上的教程太多了&#xff0c;而且现在Citrix已经将Xendesktop的安装做的越来越简单方便了&#xff…

手机靓号高亮效果(Vue)

效果 效果如下&#xff0c;靓号部分会显示红色 实现思路 1、定义正则规则 2、遍历手机号&#xff0c;生成一个由0和1组成的11位字符串&#xff0c;1表示靓号&#xff0c;0不为靓号 3、在HTML中循环手机号&#xff0c;根据下标给数字添加类名light&#xff0c;即高亮 JS代码…

(笔记)Socket设置非阻塞方式

1. 在linux C中可以将socket设置为非阻塞方式,代码: int cflags fcntl(socket_df,F_GETFL,0); fcntl(socket_df,F_SETFL, cflags|O_NONBLOCK); 当然也可以将socket设置为阻塞方式,代码: int cflags fcntl(socket_df,F_GETFL,0); fcntl(socket_df,F_SETFL, cflags&~O_NONB…

TikTok品牌出海:打造独特内容,提升品牌影响力

随着社交媒体的迅猛发展&#xff0c;TikTok作为全球最热门的短视频平台之一&#xff0c;为品牌出海提供了独特的机遇。然而&#xff0c;要在TikTok上成功推广品牌&#xff0c;关键在于创造出引人注目、有吸引力的内容。本文Nox聚星将和大家探讨在TikTok上&#xff0c;什么样的内…

vue-quick-calendar—Vue超实用日历组件(带示例图,注释超详细~)

效果图 本日历组件支持&#xff1a; 1. 标记日期 2. 选中日期 3. 切换月份 4. 上月底、下月初日期显示 5. 代码复制即可使用 6. 支持npm引入&#xff0c;npm传送门&#xff1a;vue-quick-calendar 本示例为PC端&#xff0c;预处理器使用SCSS&#xff0c;移动端请自行修改样式哦…

创建完整的Vite + Vue3 + TypeScript + ESLint + prettierrc + Sass项目模版

相关网站 1. Vite中文官网&#xff1a;Vite中文官网 2. Vue3中文官网&#xff1a;Vue3中文官网 3. Element Plus官网&#xff1a;Element Plus官网 一、创建项目 安装Vite # npm npm init vitejs/app# yarn yarn create vitejs/app新建Vue3项目 # npm 6.x npm init vite…

手写简版Vue

学习了Vue之后&#xff0c;根据自己的理解&#xff0c;手写了简版Vue&#xff0c;希望对正在学习Vue源码的初学者有所帮助&#xff0c;一起加油&#xff01; 语雀访问地址&#xff1a;手写Vue HTML <!-- 声明meta&#xff0c;不然会乱码 --> <meta http-equiv"…

mysql-cluster 安装配置

mysql-cluster免编译包下载&#xff1a;https://dev.mysql.com/downloads/file/?id469881 新版本支持只把索引和用到的数据加载到内存&#xff0c;而不是老版本的整个数据库都得加到内存中 wget https://cdn.mysql.com//Downloads/MySQL-Cluster-7.5/mysql-cluster-gpl-7.5.6-…