使用计算属性绑定基于 Vuetify 的 Viewport 断点的样式

Posted

技术标签:

【中文标题】使用计算属性绑定基于 Vuetify 的 Viewport 断点的样式【英文标题】:Use computed property to bind a style based on Vuetify's Viewport breakpoints 【发布时间】:2019-10-06 03:49:56 【问题描述】:

使用 VueJS 并尝试根据 Vuetify 的视口断点设置一些文本的样式,我通过将样式绑定到如下条件来实现这一点:

:style="$vuetify.breakpoint.name === 'xs' ?  'font-size': '1.5rem !important' :  'font-size': '2.5rem !important' " 

但是我想使用计算属性来让它更干净,根据Vuetify's docs,这可以使用断点对象来实现,但是由于某种原因我无法让它工作

我查看了这个discussion 并试图从@raina77ow 复制答案,但不太确定我做错了什么。

下面是我的代码;我正在尝试在 v-card-title 中设置 h3 元素的样式

<template>
  <div>
    <section>
      <v-layout>
        <v-flex xs12 sm10 offset-sm1>
          <v-card flat >
            <v-card-title primary-title>
              <h3
                class="text-xs-center headline mb-0"
                :style="fontSize"
              >
                Some Header here
              </h3>
              <div class="text-xs-center pa-5 mx-5"> card_text </div>
            </v-card-title>
          </v-card>
        </v-flex>
      </v-layout>
    </section>
  </div>
</template>

<script>
export default 
  computed: 
    fontSize() 
      switch (this.$vuetify.breakpoint.name) 
        case "xs":
          return "1.5rem !important";
        default:
          return "3rem !important";
      
    
  ,
  data() 
    return 
      card_text:
        "Lorem ipsum dolor sit amet, brute iriure accusata ne mea."
    ;
  
;
</script>

查看 Vuejs devtool 我可以看到计算的属性值按预期变化,但无法弄清楚为什么它没有应用于 CSS

谁能告诉我我做错了什么!

【问题讨论】:

【参考方案1】:

看起来计算属性没有返回完整的样式规范。所以你可以改变计算函数

case "xs":
    return "font-size": "1.5rem !important";
default:
    return "font-size": "3rem !important";

或改变它的使用方式

:style="'font-size': fontSize"

【讨论】:

以上是关于使用计算属性绑定基于 Vuetify 的 Viewport 断点的样式的主要内容,如果未能解决你的问题,请参考以下文章

Vue JS (Vuetify) 用 slot props 实现双向数据绑定和响应式

Vue JS计算属性没有重新计算

Vue.js - 如何访问子组件的计算属性(Vuetify 数据表)

Vuejs 子组件中的道具值无法绑定到元素属性

vue.js基础知识篇:简介数据绑定指令计算属性表单控件绑定和过滤器

循环遍历 Vuejs 中的 mapstate 计算属性