Vue:设置计算属性以便 BOM 可用

Vue: setting up computed properties so that BOM is available

我想要达到的目标: 我想创建一个依赖于 BOM 屏幕 (https://www.w3schools.com/js/js_window_screen.asp) 的计算 属性。 像这样的东西:

  computed:{
      screenWidth:function(){
          return screen.availWidth;
      }
  }

这意味着我可以根据此 属性 调整我的模板,从而使其响应。在我的真实项目中,我会 return 一个用于其他计算属性的整个对象。

问题: 屏幕对象不可用于 ssr 上下文(express-vue)中的计算属性。 (虽然它是用于方法的)。我猜这是由第一次执行计算属性的时间引起的,我认为这恰好是在浏览器 BOM 可用之前。

什么可以解决我的问题: 如果有一个选项可以在浏览器 BOM 可用时首次执行计算 属性。我猜是在挂载文件之后。

您需要在 mountedbeforeMount 生命周期中执行您的逻辑,因为这是确保您实际处于浏览器环境中的唯一方法。

此时您可以简单地将数据 属性 设置为所需的 window 对象并从那里读取它。我不确定如何使用计算 属性 来实现。但问题是;您真的需要将其作为缓存 属性 开始吗?

所以经过一些研究我发现:

  1. 屏幕仅在 Stephan-v 建议的挂载挂钩后可用

  2. 屏幕不会改变,除非您更改浏览器配置

  3. 为了让我的模板响应可用的屏幕,我需要编写一个事件监听器来监听 window 的 'resize' 事件,它看起来像这样:

     mounted() {
        window.addEventListener('resize', this.resize);
     },
     beforeDestroy: function () {
        window.removeEventListener('resize', this.resize);
     },
    

在方法 this.resize 中,您将拥有对 BOM 的完全访问权限。