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的結果來強制解決此問題,但這會讓人覺得很尷尬。
您可能只需等待[下一個打勾](https://vuejs.org/v2/api/#Vue-nextTick)DOM與數據同步。 –
我會完全失望的,除了選擇選項!我要提醒一下確認。我也想說,所有其他輸入類型都正常工作。我有正確工作的複選框和文本輸入。 – Stephane
你說得對。選擇選項尚未加載。謝謝! – Stephane