使用 vue.js 添加动态类名

Bit*_*ise 4 vue.js vuex

我使用 Vue.js 制作了一个可定制的 flash 消息。这很好用,但下一步是允许将动态类添加到组件中。

Flash.vue

<template>
  <transition name="fade">
    <div v-if="showMessage" :class="flash-container {{ styleClass }}">
      <p>{{ message }}</p>
      <p>{{ styleClass }}</p>
    </div>
  </transition>
</template>

<script>
  export default{
    methods: {
      clearMessage () {
        this.$store.commit("CLEAR_MESSAGE")
      }
    },
    computed: {
      message () {
        return this.$store.getters.renderMessage
      },
      showMessage () {
        return this.$store.getters.showMessage
      },
      styleClass () {
        return this.$store.getters.styleClass
      }
    },
  }
</script>
Run Code Online (Sandbox Code Playgroud)

如果我尝试像这样添加它,我会收到此错误:

- invalid expression: Unexpected token { in

flash-container {{ styleClass }}

Raw expression: v-bind:class="flash-container {{ styleClass }}"
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

web*_*oob 9

将其更改为此,它将起作用:

:class="[styleClass, 'flash-container']"
Run Code Online (Sandbox Code Playgroud)

Another option would be to split the declarations between the dynamic and static ones:

class="flash-container" :class="styleClass"
Run Code Online (Sandbox Code Playgroud)

Under the hood, the separate ones are joined on render.

This this link for more info: https://vuejs.org/v2/guide/class-and-style.html


小智 5

如果使用v-bind,则不能使用mustache {{}}。所以你可以这样做:

<div class="flash-container" :class="styleClass">
</div>
Run Code Online (Sandbox Code Playgroud)

或者

<div :class="`flash-container ${styleClass}`">
</div>
Run Code Online (Sandbox Code Playgroud)

或者

<div class="flash-container" :class={'styleClass': true}>
</div>
Run Code Online (Sandbox Code Playgroud)

阅读此https://v2.vuejs.org/v2/guide/class-and-style.html#Binding-HTML-Classes