Commencez par regarder mon code pour comprendre le problème.
<template>
<div class="header"
:class="flat ? 'flat' : null"
:class="app ? 'app' : null">
</div>
</template>
<script>
export default {
props: {
flat: {
type: Boolean,
default: false
},
app: {
type: Boolean,
default: false
}
}
}
</script>
<style lang="scss">
.header {
width: 100%;
height: 55px;
background: white;
box-shadow: 0px 3px 6px #ccc;
transition: .8s ease-in-out;
}
.flat {
box-shadow: none;
}
.app {
padding-left: 10%;
padding-right: 10%;
}
</style>
comme vous pouvez le voir ici, ai-je mon accessoire plat qui déclenchera une classe plate pour afficher une boîte-ombre ou non . Mais je veux aussi que quelqu'un déclenche le prop d'application qui mettra un peu de remplissage dans l'en-tête.
le problème ici est que vous ne pouvez pas mettre plusieurs: classes dans un élément. y a-t-il une solution à cela?
3 Réponses :
Essayez de les combiner dans le même attribut de classe comme suit:
<div class="header"
:class="{ 'flat':flat,'app' : app}"
>header</div>
Voir le documentation officielle
Vous pouvez créer une méthode qui renvoie le même objet que la réponse @Boussadjra Barhim.
setClass: function(flat, app){
//do something else with inputs here
return {
flat: flat,
app: app
}
}
Utilisez-la via
<element :class="setClass(flat, app)" />
Mais dans dans ce cas, vous pouvez écrire un autre code plus long (sans modifier le modèle) pour traiter les valeurs avant de renvoyer un objet
//if value is evaluated into true, the key will be a part of the class
setClass: function(flat, app){
return {
flat: flat,
app: app
}
}
Il existe plusieurs façons de réaliser ce que vous essayez de faire, Vue est excellent pour cela.
1. Passez un tableau de classes
<div
class="header"
:class="[{flat, app}, someOtherClass]"
></div>
2. Passez un objet
<div
class="header"
:class="{flat, app}"
></div>
Ici, seuls les accessoires qui ont une valeur de vérité seront définis comme classes.
2.1 Si vous utilisez ES6 Vous pouvez utiliser le raccourci de la valeur de propriété de l'objet
<div
class="header"
:class="{flat: flat, app: app}"
></div>
Bonus
Vous pouvez également mélanger 1 et 2 si nécessaire (je ' j'en ai parfois besoin)
<div class="header" :class="[flat ? 'flat' : null, "app ? 'app' : null"]" ></div>
Consultez la documentation: vuejs.org/v2/guide/class-and-style. html