je suis un débutant dans Vue JS. Je voulais ajouter un nom de classe, j'ai un tableau simple utilisant la boucle for et je veux ajouter un nom de classe lang- {ARRARY VALUE}
J'ai essayé peu de choses semblent ne pas fonctionner. j'apprécierais toute aide de la communauté
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <title></title> <!-- BootStrap --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> <!-- JQuery--> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <!-- development version, includes helpful console warnings --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <body> <div id="app"> {{ message }} <p v-for=" x in languages" v-on:click="call(x)" :id="'obj-'x" style="border:1px solid black; padding: 10px;"> {{x}} </p> </div> <script> var app = new Vue({ el: '#app', data: { message: 'Hello Vue!', languages:["Python", "c++"] }, methods:{ call:function (x) { alert("Hello "+ x); } } }) </script> </body> </html>
4 Réponses :
C'est comme ça que tu fais
<p v-for="(x, index) in languages" :class="'lang-'+x" :key="index" v-on:click="call(x)" style="border:1px solid black; padding: 10px;">{{x}}</p>
Votre réponse est correcte, mais vous n'avez pas remarqué qu'un nom de classe comme lang-c++
n'est pas valide car +
est un caractère réservé dans CSS qui sert à cibler l'élément frère adjacent, veuillez vérifier ceci
:class="`lang-${x}`"
Votre réponse est correcte, mais vous n'avez pas remarqué qu'un nom de classe comme lang-c++
n'est pas valide car +
est un caractère réservé dans CSS qui sert à cibler l'élément frère adjacent, veuillez vérifier ceci
Je recommande d'utiliser une autre structure pour votre tableau de langues comme:
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> {{ message }} <p v-for=" x in languages" :class="`lang-${x.value}`" v-on:click="call(x)" :id="'obj-'+x.value" style="border:1px solid black; padding: 10px;"> {{x.label}} </p> </div>
dans ce cas, la value
propriété est utilisée comme id
ou nom de class
car un nom comme c++
n'est pas acceptable dans le nom de la classe, l'id ou tout autre attribut, et vous devez également changer :id="'obj-'x
en :id="'obj-'+x.value
.lang-cpp { color: #4455ff } .lang-python { color: #44ff44 }
var app = new Vue({ el: '#app', data: { message: 'Hello Vue!', languages: [{ value: 'python', label: 'Python' }, { value: 'cpp', label: 'C++' } ] }, methods: { call: function(x) { alert("Hello " + x.label); } } })
languages: [{ value: 'python', label: 'Python' }, { value: 'cpp', label: 'C++' } ]
Le moyen le plus simple de modifier les noms de classe dans le modèle est peut-être d'utiliser une méthode.
La méthode className()
traduit les données avec des caractères CSS invalides en quelque chose qui peut être utilisé sur la feuille de style.
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <title></title> <!-- BootStrap --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> <!-- JQuery--> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <!-- development version, includes helpful console warnings --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <style> .lang-cpp { color: red } </style> <body> <div id="app"> {{ message }} <p v-for=" x in languages" v-on:click="call(x)" :id="'obj-' + x" :class="'lang-' + className(x)" style="border:1px solid black; padding: 10px;"> {{x}} </p> </div> <script> var app = new Vue({ el: '#app', data: { message: 'Hello Vue!', languages: ["Python", "c++"] }, methods: { call: function (x) { alert("Hello " + x); }, className: function (item) { return item === 'c++' ? 'cpp' : item; } }, }) </script> </body> </html>
methods: { call: function (x) { alert("Hello " + x); }, className: function (item) { return item === 'c++' ? 'cpp' : item; } },
Démo
<p v-for=" x in languages" v-on:click="call(x)" :id="'obj-' + x" :class="'lang-' + className(x)" style="border:1px solid black; padding: 10px;">
Voulez-vous attribuer le nom de classe à la balise de paragraphe?
Oui, je veux attribuer un identifiant ou un nom de classe unique, comment puis-je faire cela