vue 懒人_Vue.js 中的实用工具方法【推荐】

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

发布于 2020-4-19|

复制链接

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

```javascript

import Vue from 'vue'

import moment from 'moment'

/**

* @filter dateFormat 时间格式化

* @param {String, Date} value 可被 new Date 解析的字符串

* @param {String} formatStr moment 的 format 字符串

* 使用方法 {{ 2019-1-1 | dateF ..

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

```javascript

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; i++) {

let p = ''

for (let j = 0; j 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 '零元整'

}

})

```

公用自定义指令

```javascript

import Vue from 'vue'

/**

* @directive preventReClick 防止按钮在短时间内多次点击造成的多次请求(一般用于提交按钮)

* @param {Element} el 绑定的元素

* @param {Number} binding 绑定的时间

* 使用方式

*/

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)

}

})

}

})

```

实用方法节流和防抖

```javascript

/**

* 应用场景

* 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 时间格式化处理

```javascript

```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)

}

}

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值