2017-07-19 74 views
2

我使用的日期选择器来设置它在我的Vuex商店被设置moment.js日期:Vuex吸气不会更新

存储状态:

const state = { 
    arrival: '', 
    departure: '' 
} 

吸气剂:

const getters = { 
    arrival: state => state.arrival, 
    departure: state => state.departure, 

    prettyArrival: (state) => { 
     if (state.arrival instanceof moment) { 
      return state.arrival.format(state.prettyFormat); 
     } 

     return ''; 
    } 
} 

我的vuex商店正在更新到达状态(这是一个moment.js对象),因为我可以清楚地看到显示更新和原始状态更改的devtools。

虽然prettyArrival没有正确更新。它仅在到达从空字符串变为moment.js对象时才被设置一次。

我的到来吸气节目在这样的devtools:

arrival:"2017-07-21T09:15:53.770Z" 

当我登录它,我得到moment.js对象虽然有似乎包含reactiveGettersreactiveSetters这样的反应似乎到位。

我是如何设置自己的吸气剂还是有其他问题?

欢迎任何提示,如果你需要更多的信息让我知道。

+0

你是什么意思由'prettyArival没有更新(......)它只是被设置一次'。所以它*正在被更新?调试(或至少把日志语句)在这个方法和if语句中。在数据中,你说默认值是空字符串,但是你传递时刻对象 - 对我来说看起来不太合适,但这可能是一个小问题。 –

+0

@AndreyPopov当在getter中使用'consolg.log'时,它似乎只是第一次调用'prettyArrival' getter,然后它再次抓住它的调用。我猜它与缓存有关:“getter的结果是基于它的依赖关系缓存的,并且只会在它的一些依赖关系发生变化时重新评估。”但我不知道这是如何在内部工作的。 –

+0

尝试将默认值更改为“{}”。还要为这个getter添加计算属性 - 它可能迫使它重新计算;) –

回答

1

解决之道在于这样的回答:

Why does vue.js not update the dom with datepicker using moment.js

我不认为这是因为我仍然有一对夫妇是被适当更新输入的情况下。我如何得到这个工作仍然是我需要解决的一个谜。

的moment.js情况下不反应,因此您可以通过抛出你的moment.js实例到构造修复它,并创建一个新的每次你设置它像这样:

moment(this.currentDate) 

this.currentDate是一个时刻.js实例在这种情况下。