我們再真實的項目中,當我們通過el-select選擇一個下拉選項時,除非是我們從新做了一次新的選擇,不管什么情況都會顯示我們選中的選項。可顯示情況是當我們刷新頁面、或者跳轉到其他頁面后又重新返回,我們之前的所選 的選項就被清空了。為了避免這個情況我們可以再選擇的時候綁定一個change
事件,每選擇一次的時候就會返回一個我們所選擇的value值,而我們只需要把這個返回的value
通過sessionStorage
保存在本地,拿的時候在從sessionStorage
中取,如下:
<el-select v-model="value" placeholder="請選擇" size="small" @change="sendSelectCompanyId">
<el-option v-for="item in allCompanyname" :key="item.coid" :label="item.companyname" :value="item.coid"></el-option>
</el-select>
<script>
export default {
data() {
return {
value:sessionStorage.getItem("selectCompanyId") ||'',
}
},
methods:{
sendSelectCompanyId(value){
//保存我們所選的value
sessionStorage.setItem('selectCompanyId',value)
},
}
}
</script>
從邏輯上講,這完全是沒問題的,可現實是,當我們刷新的時候看到的竟是我們返回的value
值而不是對應的label
值,這是什么回事呢?原來是我們從后端那到coid
是數字類型,我們把這個coid
賦值給了組件的value
,正常情況是這個是沒問題的,但是,當我們通sessionStorage
保存和讀取的時候,我們拿到coid
的類型就該變了,由原來的數字類型變為字符串類型,所以當我們刷新頁面看到的只是數字,而不是我們需要的label
。
那如何解決這個問題呢?
知道了原因解決起來也很簡單,只要把我們從本地拿到的字符串轉換為數字就可以了,如:
data() {
return {
value:Number(sessionStorage.getItem("selectCompanyId") ) || ' ',
}
}