【问题标题】:How to change vue/vuetify text field color conditionally如何有条件地更改 vue/vuetify 文本字段颜色
【发布时间】:2019-07-22 17:55:38
【问题描述】:

我想有条件地在文本字段中应用文本颜色类。我要的课是red--text,像这样:

:class="{ red--text: myModel.someBool }"

...但这会导致解析错误。我认为这个问题与类名有关,因为它有效:

<v-text-field
  v-model="myModel" label="My Text"
  :class="{ red: myModel.someBool }"
></v-text-field>

...但我想为文本着色,而不是整个字段。

将所需的类名括在引号'red--text' 中可防止解析错误,但对颜色没有影响。

有没有办法得到我想要的?

【问题讨论】:

  • 你试过:class="{ 'red--text': myModel.someBool }"吗?
  • @JacksonMiller - 是的。看看我在问题中所做的。修复包括引用课程以及其他一些内容。

标签: javascript vue.js vuetify.js


【解决方案1】:

你也可以使用方法来做到这一点

<template>
  <div>
    <v-btn text :color="tabColor(1)" @click="selectTab(1)">Tab 1</v-btn>
    <v-btn text :color="tabColor(2)" @click="selectTab(2)">Tab 2</v-btn>
  </div>
</template>

<script>

export default {
  data() {
    return {
      currentTab: 1
    };
  },
  methods: {
    selectTab(tab) {
      this.currentTab = tab;
    },
    tabColor(tab) {
      return tab == this.currentTab ? "primary" : "normal";
    },
  },
};

</script>

【讨论】:

    【解决方案2】:

    您可以使用 v-bind 和三元条件来应用样式

     <v-text-field
           v-bind:style="{'border': documentData[name] ? 'solid green 1px !important':'solid red 1px!important'}"
           v-model="documentData[name]"
           :label="name"
           :placeholder="value"
            regular/>
    

    注意 - 您不能使用颜色来更改文本。 & 突出显示框颜色以及如果您使用背景颜色代替 边框,您可以更改整个字段的颜色。

    【讨论】:

      【解决方案3】:

      你不妨从 data() 中设置实际的类

      data: function () {
              return {
                  testClass: 'red--text'
              }
          }
      

      并将您的文本字段类绑定到该值:class="testClass"

      然后在方法中改变整个类

      methods: {    
              uploader() {
                  this.testClass = 'primary--text'
              }
          }
      

      【讨论】:

        【解决方案4】:

        你可以像这样有条件地绑定类:

        :class="myModel.someBool ? 'red--text' : ''"
        

        【讨论】:

          【解决方案5】:

          创建一个将自身应用于输入的自定义范围样式(因为 v-text-field 类应用于包含 div)。

          <style scoped>
            .my-text-style >>> .v-text-field__slot input {
              color: red
            }
          </style>
          

          该样式名称可以包含连字符,只要它在类表达式中被引用即可。用 v-bind 绑定类...

          <v-text-field
            v-model="myModel" label="My Text"
            :class="{ 'my-text-style': myModel.someBool }"
          ></v-text-field>
          

          【讨论】:

          • 谢谢,但我不明白。我不知道 >>> 是什么或 __slot 做什么或为什么 color: red 会起作用(因为这是我正在尝试的)或如何使用连字符应用类名(这也是我正在尝试的)。你能解释一下吗?
          • 当
          • color: red 不起作用,因为 vuetify 在组件内部有自己的样式
          • {'red--text': true} 看起来不错。但是 vuetify 内部样式与它重叠。 {red--text: true} 不起作用,因为 red--text 是不正确的 js 对象键。用es可以把它括起来
          • 对不起 - 另一个注意事项:我需要 !important
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-10-31
          • 1970-01-01
          • 1970-01-01
          • 2020-04-21
          • 2019-02-14
          • 1970-01-01
          • 2019-11-05
          相关资源
          最近更新 更多