element-ui源码修改

92 阅读1分钟

背景

element-ui中type='datetime' format="yyyy-MM-dd HH:00" 的情况下在日期显示中会出现00的情况

4.png

修改方式

查看element-ui的源码,在element-ui的package.json中发现入口文件是lib/element-ui.common.js
在packages/date-picker/panel/date-range.vue中有对extractDateFormat的引用,extractDateFormat在src/utils/date-util.js中,代码如下
export const extractDateFormat = function(format) {
  return format
	.replace(/\W?m{1,2}|\W?ZZ/g, '')
	.replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi, '')
	.trim();
};

解释:这两段代码共同作用于一个字符串,通过复杂的正则表达式来移除特定的子串模式。第一段主要处理m、mm和ZZ的变体,第二段则处理h、hh、s的变体(最多三个连续的s)、以及a,且均支持这些字符前面可能有非单词字符的情况,同时第二段代码还忽略了大小写

正则匹配format:yyyy-MM-dd H:00 的结果如下

dd.png

可以看到这个00并没有去掉
所以我们需要修改该正则,修改的位置是在element/lib/utils/date-util.js(在lib/element-ui.common.js 可以看到引用) 我们不可能直接修改node_modules下的文件,所以我选择在main.js中进行操作,代码如下

import * as dateUtil from 'element-ui/lib/utils/date-util'

dateUtil.extractDateFormat =  (format) => {
return format.replace(/\W?m{1,2}|\W?ZZ/g, '').replace(/\W?h{1,2}|\W?s{1,3}|\W?a|\W?00/gi, '').trim();
 }
结果如下:

5.png