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 相关文章推荐
Javascript hasOwnProperty 方法 &amp; in 关键字
Nov 26 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
Aug 27 Javascript
使用jQuery管理选择结果
Jan 20 Javascript
js实现DOM走马灯特效的方法
Jan 21 Javascript
JQuery调用绑定click事件的3种写法
Mar 28 Javascript
举例讲解AngularJS中的模块
Jun 17 Javascript
常用jQuery代码分享
Jul 14 Javascript
Js 获取、判断浏览器版本信息的简单方法
Aug 08 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
Aug 11 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
微信小程序时间控件picker view使用详解
Dec 28 Javascript
vue项目打包后路由错误的解决方法
Apr 13 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
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JS动态创建元素的两种方法
2016/04/20 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
详解JavaScript中的函数、对象
2019/04/01 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
python解析html开发库pyquery使用方法
2014/02/07 Python
Python多进程机制实例详解
2015/07/02 Python
Python中交换两个元素的实现方法
2018/06/29 Python
在python中bool函数的取值方法
2018/11/01 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
python同步两个文件夹下的内容
2019/08/29 Python
pytorch-神经网络拟合曲线实例
2020/01/15 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
小饰品店的创业计划书范文
2013/12/28 职场文书
优秀的茶餐厅创业计划书
2014/01/03 职场文书
毕业生个人求职信范文分享
2014/01/05 职场文书
消防器材管理制度
2014/01/28 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
信访维稳工作汇报
2014/10/27 职场文书
科技馆观后感
2015/06/08 职场文书
关于战胜挫折的名言警句大全!
2019/07/05 职场文书
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS