Maison > interface Web > Voir.js > Comment éviter les classes vides lorsque Vue lie dynamiquement les classes !

Comment éviter les classes vides lorsque Vue lie dynamiquement les classes !

青灯夜游
Libérer: 2021-12-09 10:16:43
avant
1916 Les gens l'ont consulté

Comment éviter les classes vides dans les classes liées dynamiquement dans Vue ? L’article suivant vous expliquera comment éviter les pièges. J’espère qu’il vous sera utile.

Comment éviter les classes vides lorsque Vue lie dynamiquement les classes !

Le passage d'une chaîne vide peut entraîner des classes vides dans la sortie DOM. Dans l'opérateur ternaire, on peut renvoyer "null", ce qui garantit qu'il n'y a pas de classe vide dans le DOM. [Recommandations associées : "tutoriel vue.js"]

<!-- ❌ -->
<div :class="isBold ? &#39;bold&#39; : &#39;&#39;">
<!-- <div class> -->

<!-- ✅ -->
<div :class="isBold ? &#39;bold&#39; : null">
<!-- <div> -->
Copier après la connexion

Option 1 : Utilisez la chaîne vide ''

&#39;&#39;

我们使用三元运算符根据isBoldtrue还是falsy来有条件地设置适当的类。 在下面示例中,如果isBold真值,类就被设置为bold。 如果是虚值的,它将返回一个空字符串&#39;&#39;

html

<div :class="isBold ? &#39;bold&#39; : &#39;&#39;"></div>
Copier après la connexion

js

data() {
  return {
    isBold: false
  }
}
Copier après la connexion
Copier après la connexion

最终渲染的样子:

<div class></div>
<!-- 啊! 空的class -->
Copier après la connexion

如果isBoldtrue,会被渲染为:

<div class="bold"></div>
Copier après la connexion
Copier après la connexion

方案 2:使用null

接着,来看看如果我们给类赋值为null会发生什么。

html

<div :class="isBold ? &#39;bold&#39; : null"></div>
Copier après la connexion

js

data() {
  return {
    isBold: false
  }
}
Copier après la connexion
Copier après la connexion

最终渲染的样子:

<div></div>
<!-- Nice, 没有空的 class -->
Copier après la connexion

如果isBoldtrue,会被渲染为:

<div class="bold"></div>
Copier après la connexion
Copier après la connexion

方案 3:使用 undefined

顺便说一句,undefined也可以正常工作

<div :class="isBold ? &#39;bold&#39; : undefined"></div>
Copier après la connexion
<div></div>
<!-- Nice, no empty class -->
Copier après la connexion

虚值

下面这些是 JS 中的虚值。 因此,如果isBold是这些值中的任何一个,它将返回三元运算符的假的情况。

false
undefined
null
NaN
0
"" or &#39;&#39; or `` (empty string)
Copier après la connexion

使用对象语法重构

对于上面的事例,使用对象语法会更好一些:

<div :class="{ bold: isBold }"></div>
Copier après la connexion

使用三元运算符的一个更好的场景是设置多个类。

<div :class="isActive ? &#39;underline bold&#39; : null"></div>
Copier après la connexion

使用 && 设置类

我们看看另一个场景,看看它是否有效。

<div :class="isBold && &#39;bold&#39;"></div>
Copier après la connexion
Copier après la connexion
Copier après la connexion

&&不仅是逻辑运算符,它实际上可以产生一个值。 因此,如果isBold为真值,则返回bold。 但是,如果isBold是虚值,则返回isBold的值。

强调最后一点-它将返回isBold的值。 因此,取决于isBold的值是什么,我们原来具有空类的问题仍然存在。 让我们看一些例子。

示例 A:isBold等于false

<div :class="isBold && &#39;bold&#39;"></div>
Copier après la connexion
Copier après la connexion
Copier après la connexion

这仍然会渲染空类

<div class></div>
Copier après la connexion

示例B:isBold等于null

<div :class="isBold && &#39;bold&#39;"></div>
Copier après la connexion
Copier après la connexion
Copier après la connexion

由于isBoldnull,因此空类消失了。

<div></div>
Copier après la connexion

&&没错-实际上,它只是完成其工作。 只是我们需要一个特定的返回值。 在其他方面,我们不能渲染空类,我们必须传递nullundefined。 除了这两个的任何其他虚值都是不行的。 因为这很容易被遗漏,所以我更喜欢更明确的三元运算符,或者只是对象语法。

空类属性是否错误?

我尝试使用 W3C Markup Validation Service 进行检查,两种语法确实都可以通过。

<!-- Pass -->
<div class>...</div>

<!-- Pass -->
<div>...</div>
Copier après la connexion

深入到HTML标准: HTML Standard: Empty attribute syntax,它似乎不允许空属性。

但是...

但是这种有效性不适用于id。因为空id被认为是无效的。

<!-- Fail -->
<div id>...</div>

<!-- Fail -->
<div id="">...</div>

<!-- Pass -->
<div id="name">...</div>
Copier après la connexion
❌ 错误:ID不能为空字符串。

总结

由于空类被认为是有效的,并且规范不反对它,因此所有这些都由你自己选择。 它是你的代码库,你可以决定如何处理它。 如果你想保持HTML输出的整洁,则可以将nullNous utilisons l'opérateur ternaire selon isBold code> est <code>true ou falsy pour définir conditionnellement la classe appropriée. Dans l'exemple suivant, si isBold est true, la classe est définie sur bold. S'il s'agit d'une valeur virtuelle, elle renverra une chaîne vide ''.

html

rrreee

js

rrreee

Le rendu final ressemble à :

rrreee

Si isBold est true , sera rendu comme :
rrreee

Option 2 : Utiliser null

Ensuite, voyons si nous attribuons null à la classe Que se passe-t-il. html

rrreee🎜js🎜rrreee🎜Le rendu final ressemble à : 🎜rrreee🎜Si isBold est true , sera rendu comme : 🎜rrreee

Option 3 : Utiliser undefined

🎜Au fait, undefined peut également fonctionner normalement 🎜rrreeerrreee

Valeur virtuelle

🎜Ce qui suit sont des valeurs virtuelles en JS. Par conséquent, si isBold correspond à l'une de ces valeurs, il renverra la casse fausse de l'opérateur ternaire. 🎜rrreee

Refactoring à l'aide de la syntaxe objet

🎜Pour l'exemple ci-dessus, il serait préférable d'utiliser la syntaxe objet : 🎜rrreee🎜Un meilleur scénario utilisant l'opérateur ternaire est Configurer plusieurs classes . 🎜rrreee

Utiliser la classe de paramètres &&

🎜Regardons un autre scénario pour voir si cela fonctionne. 🎜rrreee🎜&& n'est pas seulement un opérateur logique, il produit en fait une valeur. Par conséquent, si isBold est vrai, bold est renvoyé. Cependant, si isBold est imaginaire, la valeur de isBold est renvoyée. 🎜🎜Insistez sur le dernier point - il renverra la valeur de isBold. Ainsi, selon la valeur de isBold, notre problème initial d'avoir une classe vide existe toujours. Regardons quelques exemples. 🎜

Exemple A : isBold est égal à false

rrreee🎜Cela rendra toujours la classe vide🎜rrreee

Exemple B : isBold est égal à null

rrreee🎜Puisque isBold est null code>, donc la classe vide disparaît. 🎜rrreee🎜&&C'est vrai, en fait, il fait juste son travail. C'est juste que nous avons besoin d'une valeur de retour spécifique. Par ailleurs, nous ne pouvons pas restituer les classes vides, nous devons passer null ou undefined. Toute autre fausse valeur autre que ces deux-là ne fonctionnera pas. Comme il est facile de manquer cela, je préférerais l'opérateur ternaire plus explicite, ou simplement la syntaxe d'objet. 🎜

L'attribut de classe vide est-il erroné ?

🎜J'ai essayé d'utiliser le W3C Markup Validation Service🎜 pour vérifier, les deux syntaxes sont effectivement OK passer. 🎜rrreee🎜Profondément familiarisé avec la norme HTML : Norme HTML : Syntaxe d'attribut vide🎜, elle ne semble pas autoriser les attributs vides. 🎜

Mais...

🎜Mais cette validité ne s'applique pas à id. Parce qu'un id vide est considéré comme invalide. 🎜rrreee🎜❌ Erreur : l'ID ne peut pas être une chaîne vide. 🎜

Résumé

🎜Puisque les classes vides sont considérées comme valides et que la spécification ne s'y oppose pas, c'est votre choix. C'est votre base de code et vous décidez quoi en faire. Si vous souhaitez garder votre sortie HTML propre, vous pouvez transmettre null à l'opérateur ternaire Vue. Si cela ne vous importe pas, oubliez ça. Il n'y a pas de bonne réponse ici, tout dépend de vos préférences🎜🎜🎜Adresse originale en anglais : https://www.samanthaming.com/tidbits/96-vue-use-null-for-class/🎜🎜Auteur : Samantha Ming 🎜🎜Traducteur : Front-end Xiaozhi🎜🎜🎜Pour plus de connaissances liées à la programmation, veuillez visiter : 🎜Introduction à la programmation🎜 ! ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
vue
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal