欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript實時監(jiān)聽localStorage變化的實現方法小結

 更新時間:2024年06月30日 13:35:49   作者:接著奏樂接著舞。  
很多時候,我們在A頁面通過點擊之類的操作獲得一個數值,然后拿到B頁面使用,我們希望這個值是響應式的,當然你可以使用vue或者react的實現,這篇文章適合想偷懶或者很多后端小伙不愿意去用的使用,效果是差不多的主要是適用于任何基于JavaScript的項目,需要的朋友可以參考下

在不同窗口/選項卡中監(jiān)聽 localStorage 變化

當 localStorage 的數據在一個窗口/選項卡中改變時,其他同源的窗口/選項卡會觸發(fā) storage 事件。我們可以利用這個事件來監(jiān)聽 localStorage 的變化。

示例代碼

// 添加 storage 事件監(jiān)聽器
window.addEventListener('storage', function(event) {
  if (event.key === 'groupID') {
    console.log('New value:', event.newValue);
  }
});

解釋

  • storage 事件會在同源的其他窗口/選項卡中觸發(fā)。
  • event.key 是變化的 localStorage 項的鍵。
  • event.newValue 是變化后的新值。

注意事項

  • 只有在不同的窗口/選項卡之間修改 localStorage 時,才會觸發(fā) storage 事件。
  • 如果在同一個窗口/選項卡中修改 localStorage,則不會觸發(fā) storage 事件。

在同一個窗口/選項卡中監(jiān)聽 localStorage 變化

在同一個窗口/選項卡中,storage 事件不會被觸發(fā)。我們可以通過自定義事件或其他手段來實現對 localStorage 變化的監(jiān)聽。

方法一:使用自定義事件

  • 設置 localStorage 并觸發(fā)自定義事件
function setLocalStorageItem(key, value) {
  localStorage.setItem(key, value);
  const event = new CustomEvent('localStorageChange', { detail: { key, value } });
  window.dispatchEvent(event);
}
  • 監(jiān)聽自定義事件
window.addEventListener('localStorageChange', function(event) {
  if (event.detail.key === 'groupID') {
    console.log('New value:', event.detail.value);
  }
});

方法二:使用定時器輪詢

另一種方法是在一定時間間隔內輪詢 localStorage 的值,檢查是否發(fā)生變化。

let lastValue = localStorage.getItem('groupID');

setInterval(function() {
  const newValue = localStorage.getItem('groupID');
  if (newValue !== lastValue) {
    console.log('New value:', newValue);
    lastValue = newValue;
  }
}, 1000); // 每秒檢查一次

方法三:使用 Proxy 對象

如果希望對所有的 localStorage 操作進行代理,可以使用 Proxy 對象。

const localStorageProxy = new Proxy(localStorage, {
  set(target, key, value) {
    target.setItem(key, value);
    const event = new CustomEvent('localStorageChange', { detail: { key, value } });
    window.dispatchEvent(event);
    return true;
  }
});

// 設置值時使用代理對象
localStorageProxy.groupID = 'newValue';

// 監(jiān)聽自定義事件
window.addEventListener('localStorageChange', function(event) {
  if (event.detail.key === 'groupID') {
    console.log('New value:', event.detail.value);
  }
});

示例:通過 localStorage 監(jiān)聽實現頁面間通信

假設我們有兩個頁面,頁面A設置 localStorage 中的 groupID 值,頁面B監(jiān)聽 groupID 的變化并根據最新的值執(zhí)行相應的邏輯。

頁面A:設置 localStorage 并觸發(fā)自定義事件

const sss = (node, data) => {
  let id = data.id.split('_')[1];
  alert(id);

  localStorage.setItem('groupID', id);
  // 手動觸發(fā)自定義事件
  const event = new CustomEvent('localStorageChange', { detail: { key: 'groupID', value: id } });
  window.dispatchEvent(event);
};

頁面B:監(jiān)聽自定義事件并獲取最新的 groupID 值

mounted() {
  let _this = this;

  // 初次加載時獲取數據
  _this.getData();

  // 使用自定義事件監(jiān)聽 groupID 變化
  window.addEventListener('localStorageChange', function(event) {
    if (event.detail.key === 'groupID') {
      alert('1');
      _this.getData();
    }
  });
},

methods: {
  async getData() {
    const id = localStorage.getItem('groupID');

    // 檢查 id 是否存在
    if (!id) {
      this.$message({
        message: 'Group ID 不存在,請先選擇一個組。',
        type: 'warning'
      });
      return;
    }

    try {
      const res = await traffic.trafficvulndel({
        page: this.formData.page_num,
        size: this.pageSize,
        search: this.formData.search_field,
        groupID: id,
        ...this.formData
      });
      
      if (res.code === 200) {
        this.tableData = res.data.assetsInfo;
        console.log(this.tableData, 'this.tableData');
        this.totalpage = res.data.count;
      } else {
        this.$message({
          message: res.msg,
          type: 'error'
        });
      }
    } catch (error) {
      console.log(error);
      this.$message({
        message: '請求失敗,請稍后再試。',
        type: 'error'
      });
    }
  }
}

以上就是JavaScript實時監(jiān)聽localStorage變化的實現方法小結的詳細內容,更多關于JavaScript監(jiān)聽localStorage變化的資料請關注腳本之家其它相關文章!

相關文章

  • 微信小程序封裝的HTTP請求示例【附升級版】

    微信小程序封裝的HTTP請求示例【附升級版】

    這篇文章主要介紹了微信小程序封裝的HTTP請求,結合實例形式分析了微信小程序封裝基于wx.request方法的http請求相關操作與使用技巧,并附帶升級版示例供大家參考,需要的朋友可以參考下
    2019-05-05
  • js判斷手機是否安裝并打開app,未安裝則安裝app【兼容Android、ios,親測可用】

    js判斷手機是否安裝并打開app,未安裝則安裝app【兼容Android、ios,親測可用】

    這篇文章主要介紹了js判斷手機是否安裝并打開app,未安裝則安裝app,通過調用瀏覽器判斷app,兼容Android、ios等系統,,需要的朋友可以參考下
    2023-05-05
  • 小程序云開發(fā)教程如何使用云函數實現點贊功能

    小程序云開發(fā)教程如何使用云函數實現點贊功能

    這篇文章主要為大家詳細介紹了小程序云開發(fā)教程如何使用云函數實現點贊功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • JavaScript 代碼分割的實現步驟

    JavaScript 代碼分割的實現步驟

    JavaScript代碼分割是一種優(yōu)化策略,通過將代碼拆分成較小的塊,只在需要時加載,可以降低初始加載時間,減小頁面體積,本文主要介紹了JavaScript代碼分割的實現步驟,感興趣的可以了解一下
    2024-01-01
  • js Canvas繪制圓形時鐘效果

    js Canvas繪制圓形時鐘效果

    這篇文章主要為大家詳細介紹了js Canvas繪制圓形時鐘效果的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • JS仿Base.js實現的繼承示例

    JS仿Base.js實現的繼承示例

    這篇文章主要介紹了JS仿Base.js實現的繼承,結合具體實例形式分析了javascript擴展操作及面向對象程序設計相關實現技巧,需要的朋友可以參考下
    2017-04-04
  • JavaScript中數字轉字符串的6種方式以及性能比較

    JavaScript中數字轉字符串的6種方式以及性能比較

    在JavaScript中將字符串轉換為數字有多種方法,下面這篇文章主要給大家介紹了關于JavaScript中數字轉字符串的6種方式以及性能比較的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • 用原生JS實現簡單的多選框功能

    用原生JS實現簡單的多選框功能

    這篇文章主要介紹了用原生JS實現簡單的多選框功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • Three.js+React實現3D文字懸浮效果

    Three.js+React實現3D文字懸浮效果

    這篇文章主要介紹了如何利用Three.js+React制作出神奇的3D文字懸浮效果,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-03-03
  • JS Array對象入門分析

    JS Array對象入門分析

    每天一對象,今天我們也來new一個。沒有系統的學過JS,沒有特別的寫過一個比較出色的類庫,沒有運用過一個很強的類庫,prototype.js在進行著,慢慢的前進相信不久的將來就可以應用prototype.js來開發(fā)自己的應用程序了。
    2008-10-10

最新評論