使用Vue.js跨浏览器选项卡反应localStorage对象

Kri*_* J. 0 local-storage vue.js vuejs2

我正在尝试使localStorage对象具有反应性,因此如果它更新,它也将使用同一个对象在其他选项卡中更新.我正在使用Vue.js并尝试创建一个返回localStorage对象的计算属性,但这不起作用.如何使对象具有反应性并使其在其他浏览器选项卡中更新?

computed: {
  localStorageObject() {
    return JSON.parse(localStorage.getItem('object'));
  }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*mas 5

@Matthias有一个答案的开头,但它不会对其他标签中的更改做出反应.要做到这一点,你可以处理StorageEvent.这是一个粗略的草图,您可以根据需要进行增强.

const app = new Vue({
  el: '#app',
  data: {
    name: ''
  },
  methods: {
    onStorageUpdate(event) {
      if (event.key === "name") {
        this.name = event.newValue;
      }
    }
  },
  mounted() {
    if (localStorage.name) {
      this.name = localStorage.name;
    }
    window.addEventListener("storage", this.onStorageUpdate);
  },
  beforeDestroy() {
    window.removeEventListener("storage", this.onStorageUpdate);
  },
  watch: {
    name(newName) {
      localStorage.name = newName;
    }
  }
});
Run Code Online (Sandbox Code Playgroud)