使用場景:vue
全局vue的data裏面git
progressBarLists: new Map(), //實車進度條數據數組
點擊左邊列表數組
let mapValue = { qd: info.qd, zd: info.zd, pars: 0 }; this.progressBarLists.set(info.dlid, mapValue);
watch的socket的實車數據socket
carGPSData() { if (this.focusGroup) { this.carGPSData.forEach(carInfo => { const gcj02coord = coordtransform.wgs84togcj02(carInfo.longitude, carInfo.latitude); this.gsLine.forEach(item => { if (carInfo.dlid == item.dlid) { let coods = []; let coodsAttr = { carNumber: carInfo.cph, velocity: carInfo.speed }; coods[0] = gcj02coord[1]; coods[1] = gcj02coord[0]; item.value.realTrack(coods, coodsAttr); let jdt = item.value.getProgress(); jdt = parseInt(jdt * 100); let mapValue = { qd: item.qd, zd: item.zd, pars: jdt }; this.progressBarLists.set(item.dlid, mapValue); this.$forceUpdate(); } }); this.videoSocket.send( JSON.stringify({ channel: 'BINDRESOURCE', dlid: this.focusGroup.dlid, lat: gcj02coord[1], lon: gcj02coord[0], tzid: this.focusGroup.id }) ); }); } },
視圖層去遍歷map對象ide
<div v-if="focusGroup"> <div v-if="progressBarState"> <transition enter-active-class="animated fadeInLeft" leave-active-class="animated fadeOutLeft"> <div class="carController2" :class="{leftController:!groupListStatus}"> <div v-for="(value,key) in progressBarLists" :key=key> <div class="carController2_cont"> <div class="carController2_cont-w"> {{value[1].qd}}</div> <progressBar :carLineLength="value[1].pars" /> <div class="carController2_cont-w"> {{value[1].zd}}</div> </div> </div> </div> </transition> </div> </div>
裏面的坑,this
第一點>.v-for首先不支持map對象的遍歷,得本身在map對象的value裏面去封裝一個array先,spa
其次,v-for遍歷出來的map對象的[0]是key值,[1]纔是value,3d
第三點>watch裏面的map對象一直在改變,vue視圖裏面的map對象數據不變,試了各類方式解決,最後在watch裏面用了code
this.$forceUpdate();解決
第四點>map對象的遍歷刪除orm
for (let [key, val] of _this.progressBarLists) { let element = _this.progressBarLists; if (key == item.dlid) { element.delete(key); } }
總結:map對象的key值存id,value存的須要的值得數組對象,爲了作到,點擊列表1,我會生成一個列表1的一一對應的數據,點擊列表2,我會生成一個列表2的一一對應的數據,而後再點擊列表1,這個map對象的length永遠不會增長,不會像數組push那樣,
只會作值得替換