youzan / vant-weapp

轻量、可靠的小程序 UI 组件库
https://vant.pro/vant-weapp/
MIT License
17.67k stars 3.48k forks source link

日历组件formatter函数里获取不到this里的变量 #4087

Closed shanghaobo closed 3 years ago

shanghaobo commented 3 years ago

日历组件配置formatter后,在formatter函数里打印this里的变量是undefined,是怎么回事?

shanghaobo commented 3 years ago

测试代码

<template>
    <view>
        <van-calendar
          title="记录日历"
          class="calendar"
          :formatter="formatter"
          :poppable="false"
        >
        </van-calendar>
    </view>
</template>

<script>
    export default{
        data(){
            return{
                a:123
            }
        },
        methods:{
            formatter(day){
                console.log('a',this.a);
                return day;
            }
        }
    }
</script>

<style>
</style>

打印出来是undefined

rex-zsd commented 3 years ago

mpvue 不清楚问题的逻辑是什么。 在原生小程序中,data 内虽然可以定义方法,但是方法无法访问到组件实例,即以下的代码是有问题的

Page({
  data: {
    formatter() {
      console.log(this);
    }
  }
});

可以使用如下的方法来使 formatter 能正常访问到 this

Page({
  data: {},

  attached() {
    this.setData({
      formatter() {
        console.log(this);
      }
    });
  }
});
rex-zsd commented 3 years ago

mpvue 也可以按照上面代码的思路调整下看能否访问到 this。