2017-07-19 73 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實例在這種情況下。