2017-04-14 56 views
1

我試圖從路由加載緩存中加載窗體值,所以如果有人從一個路由導航到另一個他們不會失去它們設置。複選框和文本輸入工作正常。只有選擇似乎有問題。

這裏的元素:

<select id="client" name="client[]" multiple="" v-model="chosen_clients"> 
    <option v-for="client in clients" v-bind:client="client" :value="client.id">@{{ client.name }}</option> 
</select> 

首先,我檢查緩存和更新地址欄:

beforeCreate: function(){ 
    if(sessionStorage.getItem('invoiceable')){ 
     router.push({ path: '/invoiceable?'+sessionStorage.getItem('invoiceable')}); 
    } 
}, 

然後我將數據綁定到地址欄:

data: function(){ 
    return { 
     chosen_clients: this.$route.query['client[]'] ? (Array.isArray(this.$route.query['client[]']) ? this.$route.query['client[]'] : [this.$route.query['client[]']]) : [], 
    } 
}, 

後來裝了之後,我想取數據並更新地址欄,但是有個問題:$('#client')。val()具有正確的值(表示顯式選擇的選項作爲序列化表單的一部分出現)。我知道這一點,因爲我有console.logs設置beforeUpdate不到一秒後,值不存在。串行化它顯示沒有任何交互與選擇。即使我手動設置$('#client')。val([2,12]);在.serialize()之前,正確的值不存在。我可以通過手動將數據添加到.serialize的結果來強制解決此問題,但這會讓人覺得很尷尬。

+2

您可能只需等待[下一個打勾](https://vuejs.org/v2/api/#Vue-nextTick)DOM與數據同步。 –

+0

我會完全失望的,除了選擇選項!我要提醒一下確認。我也想說,所有其他輸入類型都正常工作。我有正確工作的複選框和文本輸入。 – Stephane

+0

你說得對。選擇選項尚未加載。謝謝! – Stephane

回答

0

@羅伊J是對的。選擇選項尚未加載。