vue.js 武伊斯|如何观看window.property的变化?

pcww981p  于 2022-12-19  发布在  Vue.js
关注(0)|答案(1)|浏览(96)

实际上,我在尝试监视跟踪window.gtmDataObject的对象时遇到了困难。在网站交互时,新对象被推送到数组window.gtmDataObject。我尝试监视每次使用新对象更新此全局变量时。我也尝试了计算属性监视器,但没有成功。

computed: {
    gtmDataObject () {
        return window.gtmDataObject
    }
},

有什么线索,或者解决办法吗?

yb3bgrhw

yb3bgrhw1#

对于Vue2项目,Vue没有代理导出的接口,可以使用Object.defineProperties,Vue2也是由Object.defineProperties驱动的。

// your Vue root vm
const app = new Vue({...});

Object.defineProperties(window, {
    gtmDataObject: {
        value: 'string',
        writable: true
    },
    gtmDataObject: {
        get: function() {
            return this.gtmDataObject;
        },
        set: function(val) {
            this.gtmDataObject = val;
            app.$root.$emit('gtmDataObject-updated', val);
        }
    }
});

然后在Vue组件中:

mounted() {
    this.$root.$on('gtmDataObject-updated', value => {
        // do something you want
    });
}

但是我建议您使用Vuex(对于Vue2)或Pinia(对于Vue3)来管理全局变量,而不是设置window属性

相关问题