【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)}}

转自:https://blog.csdn.net/weixin_41568816/article/details/109778846

原文地址:https://www.cnblogs.com/vickylinj/p/14384503.html