【问题标题】:Creating a computed property?创建计算属性?
【发布时间】:2019-07-10 16:21:53
【问题描述】:

我正在尝试通过下拉菜单更改文本的字体大小,并且在大多数情况下它可以按我想要的方式工作。虽然,有没有更好的方法来做到这一点,比如使用计算或观察者?不知道我将如何执行?

这是一支工作笔:https://codepen.io/anon/pen/xoMXPB?editors=1011 如何更改第 6 行的逻辑以将其替换为计算或观察者?

<div id="app">
    <v-app id="inspire">
        <v-container>
            <v-select :items="items" label="Font-Size" v-model="myFont">
            </v-select>
            <div>
                <p :style="{'font-size': myFont == 'Large' ? 24 + 'px' : myFont == 
     'Medium' ? 18 + 'px' : 14 + 'px'}">Large="24px", Small="16px",
                    Medium="18px"</p>
            </div>
        </v-container>
    </v-app>
</div>


new Vue({
    el: '#app',
    data() {
        return {
            items: [
                'Large',
                'Medium',
                'Small',
            ],
            myFont: null,
        };
    },
})

感谢任何帮助。

【问题讨论】:

    标签: javascript vuejs2 vuetify.js


    【解决方案1】:

    正如您所说,计算属性(或在本例中为方法)可以在这里为您提供帮助 - 主要只是压缩代码并使其更加灵活;

    methods: {
      calculateFontSize: function(size){
       switch(size){
        case "LARGE":
          return "24px";
        case "MEDIUM":
          return "18px";
        default:
          return "14px";
       }
      }
    }
    &lt;p :style="calculateFontSize(myFont)"&gt;&lt;/p&gt;

    【讨论】:

    • 我喜欢这种做事方式(因为我正试图做这样的事情),但它给了我一条错误消息,说 calculateFontSize 不是函数
    • 糟糕,要像这样使用 Parma,最好将其创建为一种方法。完全相同的代码,只是将计算更改为方法。查看我更新的代码。
    • 去掉错误但大小现在不会改变!!
    • 很奇怪。我可以确认 html 部分看起来像 &lt;p :style="'font-size:' + calculateFontSize(myFont)"&gt;&lt;/p&gt; 吗?
    • 我知道我做错了什么。有效。谢谢你。接受它作为答案
    【解决方案2】:

    如果使用对象数组作为选项来简化计算属性中的条件。

    注意 v-select 中的 item-textitem-value 属性。那么条件句就可以简单的添加样式语法font-size: ${this.myFont}px

    Vue.config.silent = true;
    Vue.use(Vuetify);
    
    new Vue({
      el: '#app',
      data: () => ({
        items: [
          { label: 'Large', value: 24 },
          { label: 'Medium', value: 18 },
          { label: 'Small', value: 16 },
        ],
        myFont: 16
      }),
      computed: {
        style() {
          return `font-size: ${this.myFont}px` ;
        }
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.18/vue.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vuetify@1.5.14/dist/vuetify.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/vuetify@1.5.14/dist/vuetify.min.css">
    
    <div id="app">
      <v-app id="inspire">
        <v-container>
          <v-select :items="items" item-text="label" item-value="value" label="Font-Size" v-model="myFont"></v-select>
          <div>
            <p :style="style">Font is {{myFont}}px</p>
          </div>
        </v-container>
      </v-app>
    </div>

    【讨论】:

    • 我可以建议在您的 sn-p 中禁用控制台吗?即使在扩展的 sn-p 中也很难看到结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2019-03-31
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    相关资源
    最近更新 更多