【问题标题】:Why does it only add/minus 7 to the originally set data on mount为什么mount时原来设置的数据只加/减7
【发布时间】:2019-09-10 08:55:57
【问题描述】:

这两种方法(addsevendays 和 minussevendays)附加到按钮上,我希望它们在每次单击时在日期加上或减去 7 天,但它只执行一次,即 2019-09-10 只会加上至 2019-09-17 或减至 2019-09-3。

不应该从新的状态做吗?

data: () => ({
   today: null,
}),

  addSevenDays() {
    this.today = moment().add(7, 'days').format("YYYY-MM-DD"))
    console.log(this.today)
  },      
  minusSevenDays() {
    this.today = moment().subtract(7, 'days').format("YYYY-MM-DD");
    console.log(this.today)
  }

  mounted () {
    this.today = moment().format('YYYY-MM-DD')
  }

【问题讨论】:

    标签: javascript vue.js momentjs


    【解决方案1】:

    因为您总是在添加函数中使用moment() 获取当前时间。

    将函数中的 moment() 替换为 moment(this.today)

    new Vue({
      el: '#app',
      data: {
        today: null,
      },
      methods: {
         addSevenDays() {
        this.today = moment(this.today).add(7, 'days').format("YYYY-MM-DD");
        console.log(this.today);
      },      
      minusSevenDays() {
        this.today = moment(this.today).subtract(7, 'days').format("YYYY-MM-DD");
        console.log(this.today);
      }
      },
       mounted () {
        this.today = moment().format('YYYY-MM-DD');
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    
      <div id="app">
      <button @click="minusSevenDays">-</button>{{ today }}<button @click="addSevenDays">+</button>
    </div>

    【讨论】:

    • 不! moment().format() 返回一个字符串!不是一刻!
    • 您应该将时刻保存在变量中,或者每次都从 this.today 创建一个时刻
    • 好的,那你必须是this.today.format('YYYY-MM-DD').add(7, 'days').format("YYYY-MM-DD"))
    • 最好将today 保留为Moment 对象,并将.format('YYYY-MM-DD') 移动到模板中。这样,您就不必在字符串和对象之间来回转换。
    • @TomMarienfeld 没关系,这个网站的主要观点没有任何声誉:)
    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 2012-01-17
    • 2014-05-10
    • 2016-04-22
    • 2018-10-18
    • 2019-05-31
    相关资源
    最近更新 更多