vue之複雜對象結構的響應,如map對象

使用場景: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那樣,

只會作值得替換

相關文章
相關標籤/搜索