实际上,我在尝试监视跟踪window.gtmDataObject的对象时遇到了困难。在网站交互时,新对象被推送到数组window.gtmDataObject。我尝试监视每次使用新对象更新此全局变量时。我也尝试了计算属性监视器,但没有成功。
computed: { gtmDataObject () { return window.gtmDataObject } },
有什么线索,或者解决办法吗?
yb3bgrhw1#
对于Vue2项目,Vue没有代理导出的接口,可以使用Object.defineProperties,Vue2也是由Object.defineProperties驱动的。
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属性
Vuex
Pinia
window
1条答案
按热度按时间yb3bgrhw1#
对于Vue2项目,Vue没有代理导出的接口,可以使用
Object.defineProperties
,Vue2也是由Object.defineProperties
驱动的。然后在Vue组件中:
但是我建议您使用
Vuex
(对于Vue2)或Pinia
(对于Vue3)来管理全局变量,而不是设置window
属性