該篇繼續記錄最近專案中一些疑難知識點和坑的解決辦法。
- 在vue多路由切換的過程中,可能存在這樣一種情況,即多個頁面使用同一個元件,這就會產生一種情況,在這幾個頁面相互切換的過程中並不會觸發vue的created或者mounted鉤子,官方文件說可通過watch $route的變化來做處理,但比較麻煩,還得watch。後來發現其實可以簡單的在 router-view上加上一個唯一的key,來保證路由切換時都會重新渲染觸發鉤子了。 如下:
<router-view :key="key"></router-view>
computed: {
key() {
// 或者 :key="$route.path" 只要保證key唯一就可以了
return this.$route.name !== undefined? this.$route.name + +new Date(): this.$route + +new Date()
}
}
複製程式碼
- 有個場景下我把v-for和v-if混合在一起寫了,後來聽別人說不要寫在一起。我開始是這樣寫的,如下圖 寫的比較low,但是功能能正常實現。後來就換成computed方式
<ul class="jcButtonUl">
<li v-for="(item,index) in hostLoginManageButton" :key="index" @click="hostAddManage(index)">
<span :class="item.icon"></span>
{{item.btnValue}}
</li>
</ul>
複製程式碼
computed:{
hostLoginManageButton(){
let buttonArray=[];
this.hostManageButtonArray.forEach(function(item,index){
if(index!==2 && index!==3 && index!==5){
buttonArray.push(item);
}
});
return buttonArray;
}
}
複製程式碼
解決。
- 在實際開發中,用到了element的表格元件,其中包含了checkbox。發現了這樣一個問題,每次勾選某行checkbox後,點選別的按鈕顯示一個dialog時,剛才勾選行的checkbox的勾選狀態會消失。但是資料中表示勾選的資料卻沒有清空。一直沒找到合適的辦法解決該問題,後來監聽了表格的selection-change事件,對應進行修改。問題雖然可以解決,總感覺不完美。希望有大神可以提供解決方案。
<el-table ref="jcqtTable" v-loading="loading" :data="tableData" tooltip-effect="dark" stripe style="width: 100%" @select="handleSelect" @selection-change="handleSelect" @select-all="handleSelect">
<el-table-column type="selection" width="55"></el-table-column>
省略
</el-table>
複製程式碼
computed: {
tableData() {
return this.jcqtTableCon.slice((this.currentPage-1)*this.pageSize, this.currentPage*this.pageSize)
}
}
複製程式碼
- 元件裡監聽一般資料方式是
watch:{
textInput:function(val){
//操作
}
}
複製程式碼
如果是監聽某一物件裡的某一項值的變化該如何做呢?往下看
data(){
return {
obj:{
textInput:''
}
}
},
watch:{
'obj.textInput':function(val){
//操作
}
}
複製程式碼
專案沒有做完目前,陸續更新中。