我爱模板网在开发一个cms程序时,有这么个需求:cms的内容众所周知是核心功能之一,所以在文章列表点击添加文章时,要打开新窗口,然后在新窗口添加完文章,自动关闭这个窗口,同时通知列表页刷新。
本想着,vue通信方法很多,如vuex、event Bus等,但是由于vue是单页应用,两个标签页的状态是响应不到一块的。但是,两个页面的域名相同,storage是共享的。所以只要通过监听storage变化即可。
方法如下:
在列表页中,点击进入详情页时,存储一个数据,值为一个时间戳
localStorage.setItem('isSave', new Date().getTime())
在列表页中,通过window.onstorage监听storage数据的改变,返回一个event事件对象
function onStorageHandle(e) { if (e.key === 'isSave' && e.newValue === 'true') { getList() // 刷新列表页 } } window.addEventListener('storage', onStorageHandle);
在详情页中,保存成功后,更新时间戳,并关闭当前页面
localStorage.setItem('isSave', new Date().getTime()) window.close()