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