乐趣区

红包扫雷系统开发

红包扫雷系统开发(T:I8O285IO282V 林楠)

  1. 定义一个日期格式化函数

都 9012 了,我们就采用 ES Module 的写法,在 vue 初始化的项目 src 的文件中新建一个 filters 文件夹,并在其中添加 DateFmt.js 文件,代码如下

// wx:46488492
export function DateFmt(date, fmt) {
if (date == null) return null;
var o = {

"M+": date.getMonth() + 1, // 月份
"d+": date.getDate(), // 日
"h+": date.getHours(), // 小时
"m+": date.getMinutes(), // 分
"s+": date.getSeconds(), // 秒
"q+": Math.floor((date.getMonth() + 3) / 3), // 季度
"S": date.getMilliseconds()

};
if (/(y+)/.test(fmt))

fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));

for (var k in o)

if (new RegExp("(" + k + ")").test(fmt))
    fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));

return fmt;
}

  1. 使用过滤器 DateFmt

定义好函数后,我们采用全局注册 filter 的方式。在 main.js 中使用 import {DateFmt} from ‘@/filters/DateFmt.js’ 导入我们上边定义的函数。使用 Vue.filter(“DateFmt”, DateFmt) 完成 filter 全局注册。

在 components 文件夹中,添加我们的测试组件 DateFormat.vue, 在该文件 template>div 节点下输入 {{new Date()|DateFmt(‘yyyy-MM-dd hh:mm:ss’)}} 然后在 app.vue 引入我们刚新添加的组件,运行,你就会在看到当前日期已经按照我们需要的格式显示在网页上。是的,就是这么简单,那完了么?

  1. 在 JS 中使用 DateFmt

好奇的朋友会发现,我们定义的 filter 都是在 template 中使用的,那我如何在 js 代码中使用呢?当然,在开发这两个 app 期间,减少数据转换的次数,有了这样的需求。

3.1 在组件页面导入函数

回到开头,我们强调了一下,过滤器其实就是一个函数。既然是函数,那引入就好了。所以在我们最初建立 DateFormat.vue 单文件组件的 <script> 块中使用 import {DateFmt} from ‘@/filters/DateFmt.js’ 导入我们的函数。代码如下:

<script>
// wx:46488492
import {DateFmt} from ‘@/filters/DateFmt.js’;
export default {
data(){
return{
curDateImportFilter: DateFmt(new Date(), ‘yyyy-MM-dd hh:mm:ss’)
}}}
</script>
在我们 <template> 中新加一个元素,并绑定 curDateImportFilter 属性,运行 npm run serve 回到浏览器,你就会看到两个格式化日期。这样好吗?我们多了一个 import , 虽然实现了,但觉得不够好。

3.2 使用 Vue.filter 返回过滤器

如果我们仔细看官方文档,就会发现官说明了,通过 Vue.filter(“filter”) 返回定义的函数 , 所以 Vue.filter 不仅可以注册,还可以返回。
我们继续在 data 中添加属性 :

curDateVueFilter: Vue.filter(“DateFmt”)(new Date(), ‘yyyy-MM-dd hh:mm:ss’)
通过上边的步骤绑定该属性,你会在浏览器上看到三个格式化好的日期。要使用 Vue.filter, 我们不得不额外的导入 import Vue from ‘vue’。跟上边一样,虽然实现了,但不够好。

3.3 使用实例属性 $options

在 vue 组件,每个组件都有各自的属性,这些属性大多挂载中属性 $options 中,在 chrome 浏览器打印 $vm0 信息,我们就找到 filter 的信息。这里科普一下,在安装 vue 开发者工具后 $vm0 表示我们当前选择的组件,结果如下图所示:

$vm0 信息

从图形上看,当前组件的 filters 为一个对象,并不能直接找到,不过展开至__proto__原型上看到了我们的 DateFmt 方法。好了现在我们在继续在 data 中添加属性

curDateOptFilter: this.$options.filters.DateFmt(new Date(), ‘yyyy-MM-dd hh:mm:ss’)
是的,采用这个方式,就不用再引入 vue 或者函数了,跟直接在 template 使用一样。简洁方便,感觉好多了。在深入一点,通过调试我们就会发现 Vue.filter 是调用 options.filters 原型上的方法,如下图所示

vue_filter_call

退出移动版