JS消息傳遞

設定好消息格式如下:

let message = {
    "resourseId": "assetId",
    "childrenResourseIds": [],
    "topoId": "self.topoId",
    "InfoSource": "2D"
  }

如果在同一腳本中可以直接獲取到對應的值。如下:

message.topoId

當我們向窗口發送消息讓其他窗口接收到消息,需要通過

window.postMessage(message, "*");

此處要傳對象而不是json字符串,否則在接收方無法通過消息體獲取到對應key的值。

接收消息代碼如下:

window.addEventListener(
    "message",
    function (e) {
      var data=e.data;
	  console.log(data);
	  console.log(data.topoId);
      console.log(e);
    },
    false
  );

2019.11.27更

當我們切換頁面的時候,監聽依然存在,第一浪費性能,第二可能影響後續的程序運行。所以我們要在切換頁面之前將監聽事件移除。

vue中移除代碼如下:

beforeDestroy() {
    //在組件生命週期結束的時候銷燬。
    console.log("dcvim移除函數");
    window.removeEventListener("message", this.ListernerHandle, false);
    console.log("dcvim移除結束");
  }

beforeDestroy是vue的聲明週期函數,在頁面被銷燬前會被調用。注意:要移除監聽,就要修改增加監聽的函數形式。在增加監聽的位置不可以使用匿名函數。且要確定在增加監聽和移除監聽的參數一樣。

如:

 window.addEventListener("message", this.ListernerHandle, false);

研究了一下午,再加上有時候vue編譯啓動後時好時壞。第一次編譯程序沒有正常運行,當我在vue中加入log再次重新啓動竟然好用了。領導說我是新手哪裏沒弄懂,搞錯了,我表示很無奈。

最近做js心情超級差,尋思不懂的問題問下公司裏做js的,可是都是回的不會,查百度。我驚呆了,程序員有這麼冷漠嗎。或者說做js的都這麼冷漠嗎?之前的公司互相探討問題都能講一下午,巴不得你來問我問題。也許是這個大公司的氛圍就是這樣吧,冰冷的辦公室。努力,跳離這個圈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章