vue 中filters过滤器不能使用this的解决方案
前言:
filters作为Vue中的过滤器 我们在实际开发中会经常使用到 比如在模板上格式化我们想要的日期 但是使用这个属性也会遇到一些问题 比如我们最常用的时间格式化工具moment.js 当我们把它挂载到全局的时候 会使用:
this.$moment().format('MM月DD日')
这时候会发现报错 提示信息为moment未定义
其实原因就是在fulters中访问不到this
下面直接说解决方案:
方案一: 不使用fiiters
这是最直接的 不使用自然就不会又问题 可以直接在模板的差值表达式中写过滤的代码 如下:
{{$moment(orderData.checkInTime).format('MM月DD日')}}
这种方式会有些不美观 并且也不大符合代码整洁的要求 所以有了方案二
方案二:使用that代替this
这种方式早就为人所用 但是问题出在 不知道在哪了定义that
下面简单说一下步骤:
- 在data中定义一个that=this
- 在需要过滤的过滤器中传入that参数
- 在filter过滤器中使用that即可
代码演示如下:
data() {
return {
that:this,//保存this以便filter中使用
tel: '1222222',
orderData: {} //订单详情信息
}
}
filters: {
formatedate(val,that) {
return that.$moment(val).format('MM月DD日')
}
}
{{orderData.checkInTime|formatedate(that)}}-{{orderData.checkOutTime|formatedate(that)}}
Vue过滤器使用问题及解决方案
博客介绍了Vue中filters过滤器在实际开发中的应用,如格式化日期,但使用时会遇到访问不到this的问题,像挂载全局时间格式化工具moment.js会报错。同时给出两种解决方案,一是不使用filters,直接在模板差值表达式写过滤代码;二是用that代替this,在data中定义that=this并传入过滤器使用。
6074

被折叠的 条评论
为什么被折叠?



