首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matchMedia函数Vue.js的计算性质

matchMedia函数Vue.js的计算性质
EN

Stack Overflow用户
提问于 2019-10-30 13:48:56
回答 4查看 3.6K关注 0票数 2

我在Vue的计算属性中编写的matchMedia函数有一些问题。问题是当我加载/刷新页面时,该函数无法工作。只有当我在浏览器中在响应设计模式下调整屏幕大小后,它才能恢复工作。

这里是我的app.js代码

代码语言:javascript
复制
     computed: {
        widthChange() {
            if (matchMedia) {
                    var mqT = window.matchMedia(" (max-width: 850px) and (min-width: 600px) ")

                    function changeWidthT(mqT) {
                    const sectionRight = document.querySelector(".section-right")
                    if (mqT.matches) {
                        sectionRight.classList.remove("col-7")
                    }
                    else {
                        sectionRight.classList.add("col-7")
                    }
                }

                mqT.addListener(changeWidthT)
            }
        }
    },

,我在页面的父页面中调用计算的属性。

代码语言:javascript
复制
<div class="frontpage-parent" :class="widthChange">...
</div>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-10-30 13:52:53

您是否尝试过在挂载钩子中调用widthChange()以使其在加载时运行?

编辑尝试将const tst = this.widthChange;放置在mousnted钩子中

票数 0
EN

Stack Overflow用户

发布于 2019-10-30 14:10:12

您在这里滥用computed属性。它们应该是getter,这意味着它们只返回准备起诉值。你实际上是在那里附加事件侦听器。

相反,您需要使用数据属性并在挂载钩子中初始化侦听器:

代码语言:javascript
复制
export default {
  name: 'Blah',
  data () {
    const tabletViewQuery = matchMedia('...')
    return {
      tabletViewQuery: tabletViewQuery.
      tabletView: tableViewQuery.matches,
    }  
  },
  mounted () {
     this.tabletViewQuery.addListener(() => {
       this.tabletView = tableViewQuery.matches
     }
  }
}

然后用在桌子上:

代码语言:javascript
复制
<div class="section-right" :class="{ 'col-7': tabletView }">

然而,可能更清洁的解决方案是使用vue-匹配媒体插件。

票数 1
EN

Stack Overflow用户

发布于 2022-06-03 10:56:45

活性Vue中的matchMedia

上述的答案对我没有用。改进BroiSatse的答案,将被废弃的addListener替换为change事件,就像https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList上提到的

带有类型记录示例的Vue Options API:

代码语言:javascript
复制
data(): { mediaQuery: MediaQueryList; isTablet: boolean; } {
    const mediaQuery = window.matchMedia('(max-width: 1024px)');

    return {
        mediaQuery,
        isTablet: mediaQuery.matches
    };
},
mounted(): void {
    this.mediaQuery.addEventListener('change', () => {
        this.isTablet = this.mediaQuery.matches;
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58626873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档