Почему мой класс не отображается в vue, но мой условный класс отображается?

#vue.js

#vue.js

Вопрос:

Я хочу показать два класса в моем button . Тот, который зависит от Boolean значения данных like "hideLeftArrow" , и другой класс, который отображается как значение по умолчанию like arrowBtn . Условный класс отображается, а класс по умолчанию — нет. Что не так с моим синтаксисом в следующем:

 :class="[{ hideArrow: hideLeftArrow }, arrowBtn]"
  

Мой полный код для справки

 <template>
  <div class="showcase-container">
    <button
      @click="showRightArrow"
      :class="[{ hideArrow: hideLeftArrow }, arrowBtn]"
    >
      <img alt="left arrow" src="../assets/leftArrow.svg" class="arrow" />
    </button>
    <a
      v-for="game in games"
      :key="game.id"
      :class="{ hideGame: game.hide }"
      :href="game.link"
      target="_blank"
      >{{ game.name }}</a
    >
    <button
      @click="showLeftArrow"
      :class="[{ hideArrow: hideRightArrow }, arrowBtn]"
    >
      <img alt="right arrow" src="../assets/rightArrow.svg" class="arrow" />
    </button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      games: [
        {
          name: "Tryangle",
          link: "https://google.com",
          id: 1,
          hide: false,
        },
        {
          name: "BagRPG",
          link: "https://youtube.com",
          id: 2,
          hide: true,
        },
      ],
      hideLeftArrow: true,
      hideRightArrow: false,
    };
  },
  methods: {
    showLeftArrow() {
      this.hideLeftArrow = !this.hideLeftArrow;
      this.hideRightArrow = !this.hideRightArrow;
      this.games[0].hide = true;
      this.games[1].hide = false;
    },
    showRightArrow() {
      this.hideLeftArrow = !this.hideLeftArrow;
      this.hideRightArrow = !this.hideRightArrow;
      this.games[0].hide = false;
      this.games[1].hide = true;
    },
  },
};
</script>

<style lang="scss">
@import "../styles.scss";
.showcase-container {
  .hideArrow {
    visibility: hidden;
  }
  .arrowBtn {
    background: none;
    border: 0;
  }
  .hideGame {
    display: none;
  }
}
</style>
  

Ответ №1:

Я думаю, вы стремитесь к этому, с кавычками вокруг arrowBtn :

 :class="[{ hideArrow: hideLeftArrow }, 'arrowBtn']"
  

В противном arrowBtn случае будет обрабатываться как имя свойства, а не как строка..
Тем не менее, я бы, вероятно, сделал это таким образом:

 class="arrowBtn"
:class="{ hideArrow: hideLeftArrow }"
  

class позволяет вам иметь как статическую, так и связанную версию для одного и того же элемента.