【问题标题】:Vue inline conditional if?Vue内联条件if?
【发布时间】:2019-03-01 14:17:43
【问题描述】:

我有以下代码:

    <div
        :id="'object' + object.id""
        :style="'position:absolute !important; width:' + object.width + '% !important; height:' + object.height + '% !important;'">
    <div

这可以正常工作并且渲染得很好。

我现在想在其中添加条件内容。类似的东西

if object.background == 'solid'
 background-color: #ffffff;
endif

我尝试通过 Vue 内联 if 来实现这一点,它给了我这个:

[object.background == 'solid' ?背景颜色:#ffffff 重要; : '']

但这只是给出了很多错误,这让我认为我处理这一切都是错误的。

对我来说,以我的风格实现简短的条件语句的正确方法是什么?

【问题讨论】:

    标签: vue.js


    【解决方案1】:

    我会使用返回样式对象的计算属性。

    new Vue({
      el: "#app",
      data: {
        width: '200px',
        height: '200px',
        background: 'solid',
      },
      computed: {
        styleObj() {
          return {
            position: 'absolute !important',
            width: `${this.width} !important`,
            height: `${this.height} !important`,
            background: this.background === 'solid' ? 'green' : 'yellow',
          };
        },
      },
    })
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js"></script>
    <div id="app">
        <div :style="styleObj">    
        </div>
    </div>

    【讨论】:

    • 我相信没有必要为此创建计算属性。您可以将对象直接绑定到style 属性。
    • 计算属性具有缓存等优点。它也比在模板中时更容易阅读。
    • @BillCriswell 你是对的。我完全忘记了缓存。
    【解决方案2】:

    我不知道这是否应该被标记为这个问题的重复:Condition in V-Bind:Style VueJS

    但是,此方法仅用于类绑定,https://vuejs.org/v2/guide/class-and-style.html

    也就是说,你问:

    对于我来说,以我的风格实现简短的条件语句的正确方法是什么?

    我认为这不是正确的方法。我的意思是,正确的方法是编写 css 类并有条件地应用它们,因为这些是记录在案的方法,如果您必须应用直接样式来覆盖适用于相关元素的所有其他样式,请将此保留。

    其他正确的方法是使用dataprops,甚至是computed propertymethod

    此外,您可以同时拥有style:style 属性,vue 会为您混合它们,因此您可以在普通属性上定义基本样式,在样式绑定上定义“其他东西”。

    但正如我所说,将它留给您真正需要在样式属性上使用它的极端情况。

    【讨论】:

    • @StevenB。我认为这可能适用于“在必须应用直接样式来覆盖所有其他样式的情况下保留它……”不是明确的,但仍然如此!哈哈哈
    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 2017-09-12
    • 2012-12-18
    • 2012-01-23
    • 2020-12-10
    • 1970-01-01
    • 2019-03-20
    • 2014-11-29
    相关资源
    最近更新 更多