Vue.js 中的实用工具方法【推荐】


Posted in Javascript onJuly 04, 2019

收集日常开发中常用到的一些工具方法, 包含 vue 的公用过滤器、公用指令等 (PS: 懒人养成记)

公用自定义过滤器

import Vue from 'vue'
import moment from 'moment'

/**
 * @filter dateFormat 时间格式化
 * @param {String, Date} value 可被 new Date 解析的字符串
 * @param {String} formatStr moment 的 format 字符串
 * 使用方法 {{ 2019-1-1 | dateFormat() }}
 */
Vue.filter('dateFormat', (value, formatStr) => {
 return moment(value).format(formatStr || 'YYYY年MM月DD日 hh:mm:ss')
})

/**
 * @filter digitUppercase 人民币金额转成汉字大写
 * @param {Number} value 金额数字
 * 使用方法 {{ 1111 | digitUppercase }}
 */
Vue.filter('digitUppercase', (value) => {
 if (Number(value)) {
 let fraction = ['角', '分']
 let digit = [
  '零', '壹', '贰', '叁', '肆',
  '伍', '陆', '柒', '捌', '玖'
 ]
 let unit = [
  ['元', '万', '亿'],
  ['', '拾', '佰', '仟']
 ]

 let head = value < 0 ? '欠' : ''
 value = Math.abs(value)
 let s = ''
 for (let i = 0; i < fraction.length; i++) {
  s += (digit[Math.floor(value * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '')
 }
 s = s || '整'
 value = Math.floor(value)
 for (let i = 0; i < unit[0].length && value > 0; i++) {
  let p = ''
  for (let j = 0; j < unit[1].length && value > 0; j++) {
  p = digit[value % 10] + unit[1][j] + p
  value = Math.floor(value / 10)
  }
  s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s
 }
 return head + s.replace(/(零.)*零元/, '元')
  .replace(/(零.)+/g, '零')
  .replace(/^整$/, '零元整')
 } else {
 return '零元整'
 }
})

公用自定义指令

import Vue from 'vue'
/**
 * @directive preventReClick 防止按钮在短时间内多次点击造成的多次请求(一般用于提交按钮)
 * @param {Element} el 绑定的元素
 * @param {Number} binding 绑定的时间
 * 使用方式 <el-button v-prevent-replace-click></el-button>
 */
Vue.directive('preventReplaceClick', {
 inserted (el, binding) {
 el.addEventListener('click', () => {
  if (!el.disabled) {
  el.classList.add('is-disabled')
  const i = document.createElement('i')
  i.classList.add('el-icon-loading')
  el.prepend(i)
  el.classList.add('is-loading')
  el.disabled = true
  setTimeout(() => {
   el.disabled = false
   el.classList.remove('is-disabled')
   el.classList.remove('is-loading')
   el.removeChild(i)
  }, binding.value || 1000)
  }
 })
 }
})

实用方法

节流和防抖

/**
 * 应用场景
 * debounce(抖动)
 * search搜索联想,用户在不断输入值时,用防抖来节约请求资源。
 * window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次
 *
 * throttle(节流)
 * 鼠标不断点击触发,mousedown(单位时间内只触发一次)
 * 监听滚动事件,比如是否滑到底部自动加载更多,用throttle来判断
 */
// 防抖
export function debounce (fn, delay = 200) {
 let timer
 return function () {
 let th = this
 let args = arguments
 if (timer) {
  clearTimeout(timer)
 }
 timer = setTimeout(function () {
  timer = null
  fn.apply(th, args)
 }, delay)
 }
}
// 节流
export function throttle (fn, interval = 200) {
 let last
 let timer
 return function () {
 let th = this
 let args = arguments
 let now = +new Date()
 if (last && now - last < interval) {
  clearTimeout(timer)
  timer = setTimeout(function () {
  last = now
  fn.apply(th, args)
  }, interval)
 } else {
  last = now
  fn.apply(th, args)
 }
 }
}

时间格式化处理

```javascript
// 格式化 startDate 和 endDate
import moment from ‘moment'
import _ from ‘lodash'
/**
@method timerByAdd 计算相对当前时间后N个单位时间的日期(加法)
@param num {Number} 相对于几个时间点
@param timer {String} 时间单位 ‘days' ‘months' ‘years‘ 更多时间单位参考moment官方文档
@param formatStr {String} moment 的 format 字符串
@return {Object} {startDate,endDate}
*/
export function timerByAdd ({
num,
timer = ‘days'
} = {}, formatStr = ‘YYYY-MM-DD') {
let startDate
let endDate = moment().format(formatStr)
num ? startDate = moment().add(num, timer).format(formatStr) : startDate = endDate
let result = {
startDate,
endDate
}
return result
}
/**
@method timerBySubtract 计算相对当前时间前N个单位时间的日期(减法)
@param num {Number} 相对于几个时间点
@param timer {String} 时间单位 ‘days' ‘months' ‘years‘ 更多时间单位参考moment官方文档
@param formatStr {String} moment 的 format 字符串
@return {Object} {startDate,endDate}
*/
export function timerBySubtract ({
num,
timer = ‘days'
} = {}, formatStr = ‘YYYY-MM-DD') {
let startDate
let endDate = moment().format(formatStr)
num ? startDate = moment().subtract(num, timer).format(formatStr) : startDate = endDate
let result = {
startDate,
endDate
}
return result
}
/**
@method timerFormat 将对象时间转成数组形式
@param {Object} timer {startDate, endDate} 
*/ 
export function timerFormat (timer) { 
if (
.isObject(timer)) {
return
.values(timer) 
} 
}

总结

以上所述是小编给大家介绍的Vue.js 中的实用工具方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
8个超棒的学习 jQuery 的网站 推荐收藏
Apr 02 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
May 08 Javascript
jquery实现文本框数量加减功能的例子分享
May 10 Javascript
Sequelize中用group by进行分组聚合查询
Dec 12 Javascript
常用的几个JQuery代码片段
Mar 13 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
Aug 25 Javascript
关于JavaScript语句后面的分号问题
Dec 07 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
Jul 25 Javascript
ant design vue datepicker日期选择器中文化操作
Oct 28 Javascript
微信小程序实现自定义底部导航
Nov 18 Javascript
Vue与React的区别和优势对比
Dec 18 Vue.js
vue引入微信sdk 实现分享朋友圈获取地理位置功能
Jul 04 #Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
Jul 04 #Javascript
微信小程序自定义弹窗实现详解(可通用)
Jul 04 #Javascript
Vue 3.x+axios跨域方案的踩坑指南
Jul 04 #Javascript
Vue.js递归组件实现组织架构树和选人功能
Jul 04 #Javascript
vue-cli配置flexible过程详解
Jul 04 #Javascript
vue动态配置模板 'component is'代码
Jul 04 #Javascript
You might like
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
chrome调试javascript详解
2015/10/21 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
mpvue小程序仿qq左滑置顶删除组件
2018/08/03 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
如何在node环境实现“get数据解析”代码实例
2020/07/03 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
实时获取Python的print输出流方法
2019/01/07 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
利用python开发app实战的方法
2019/07/09 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
2020/04/10 Python
python中rb含义理解
2020/06/18 Python
python中altair可视化库实例用法
2021/01/26 Python
python 如何在测试中使用 Mock
2021/03/01 Python
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
应届生个人求职信模板
2013/11/26 职场文书
高中生学习生活的自我评价
2013/11/27 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
大学生创业策划书
2014/02/02 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python
Django框架模板用法详解
2022/06/10 Python