换个角度使用VUE过滤器Vue中的过滤器主要用于文本格式化,比如小写转换,日期格式化等操作。官方对这个功能的介绍也很简单,但是真的很简单,一个功能而已。但是最近在做两个app的时候,遇到了一些特殊的需求。然后结合源码整理了filter在vue中的一些用法。下面我们讨论一种日期格式。1、定义一个日期格式化函数为9012,我们将使用ES模块在vue初始化的项目src文件中新建一个filters文件夹,并在其中添加DateFmt.js文件。代码如下(),//日"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(varkino)if(newRegExp("("+k+")").test(fmt))fmt=fmt.replace(RegExp.$1,(RegExp.$1.length==1)?(o[k]):(("00"+o[k]).substr((""+o[k]).length)));returnfmt;}2.使用过滤器DateFmt定义函数后,我们使用全局注册过滤器的方法。在main.js中使用import{DateFmt}from'@/filters/DateFmt.js'导入我们上面定义的函数。使用Vue.filter("DateFmt",DateFmt)完成过滤器全局注册。在components文件夹下,添加我们的测试组件DateFormat.vue,在文件template>div节点下输入{{newDate()|DateFmt('yyyy-MM-ddhh:mm:ss')}}然后在app.vue引入我们刚刚添加的新添加的组件,运行它,你会看到当前日期已经按照我们需要的格式显示在网页上了。是的,就这么简单,结束了吗?3.在JS中使用DateFmt好奇的朋友会发现我们定义的过滤器都是在模板中使用的,那么在js代码中如何使用呢?当然,在这两款app的开发过程中,都有这样的需求,需要减少数据转换的次数。3.1在组件页面导入函数回到开头,我们强调过滤器其实就是一个函数。既然是函数,直接导入就好了。因此,在我们最初设置DateFormat.vueSFC的import{DateFmt}from'@/filters/DateFmt.js';exportdefault{data(){return{curDateImportFilter:DateFmt(newDate(),'yyyy-MM-ddhh:mm:ss')}}}向我们的添加一个新元素并绑定curDateImportFilter属性,运行npmrunserve并返回到浏览器,你会看到两个格式化的日期。这个可以吗?我们又多了一个import,虽然实现了,但是还不够好。3.2使用Vue.filter返回filter仔细看官方文档会发现,官方的描述是通过Vue.filter("filter")返回定义的函数,所以Vue.filter不仅可以注册,还可以返回。我们继续在data中添加属性:curDateVueFilter:Vue.filter("DateFmt")(newDate(),'yyyy-MM-ddhh:mm:ss')通过以上步骤绑定这个属性,你会浏览到你可以在显示器上看到三个格式化的日期。要使用Vue.filter,我们必须另外从“vue”导入Vue。同上,虽然实现了,但是还不够好。3.3使用实例属性$options在vue组件中,每个组件都有自己的属性。这些属性中的大多数都安装在属性$options中。在chrome浏览器中打印$vm0信息,我们就会找到filter信息。在这里科普一下。安装vuedevelopertools后$vm0代表我们当前选择的组件,结果如下图所示:从图形上看,当前组件的filters是一个对象,不能直接找到,但是扩展为__proto__请参阅原型上的DateFmt方法。好了,现在我们继续在data中添加属性curDateOptFilter:this.$options.filters.DateFmt(newDate(),'yyyy-MM-ddhh:mm:ss')是的,用这个方法,你不需要引入vue或者functions就和直接在模板中使用是一样的。简单方便,感觉好多了。再深入一点,通过调试,我们会发现Vue.filter调用了options.filters原型上的方法,如下图4.总结再简单的函数,也有你可以的用法'想不到。要做发展,还是要发散。本来这篇文章也是想分享一下vue中的scopecss穿透功能。为了阅读方便,直接听下一章分解。欢迎感兴趣的朋友关注我的微信订阅号“小源不小”,或点击下方二维码关注。我会把自己多年开发中遇到的困难,以及一些有趣的功能发布出来,一一体验到我的订阅号。我没有事儿。我用cocoscreator开发了一个小游戏。有兴趣的朋友可以来玩
