Vue: Avec `whitespace: condenser` tous les & nbsps;, même significatifs, sont convertis en espaces

Créé le 29 janv. 2020  ·  5Commentaires  ·  Source: vuejs/vue

Version

2.6.11

Lien de reproduction

https://gist.github.com/aimozg/c073eea5a55062e3dcd8f887a8567807

Étapes à suivre pour reproduire

Exécutez example.js dans Node.

Étapes alternatives / Explication détaillée:

  1. Configurer le compilateur de modèles Vue avec whitespace: 'condense' . (c'est par défaut pour vue-cli).
  2. Modèle de rendu avec &nbsp; entité <p>a&nbsp;b</p>
  3. Inspecter le modèle pour le caractère d'espace insécable réel

Qu'attend-on?

&nbsp; entité rendue sous forme de caractère d'espace insécable; La sortie example.js doit contenir

---- whitespace: condense
// code
NBSP FOUND

Que se passe-t-il réellement?

&nbsp; entité

---- whitespace: condense
// code
NBSP NOT FOUND

L'espace blanc est supprimé par ce code de compilateur:

if (!inPre && whitespaceOption === 'condense') {
  // condense consecutive whitespaces into single space
  text = text.replace(whitespaceRE, ' ')
}

et "&nbsp;" s sont remplacés par "\xA0" s avec le décodeur d'entité plus tôt.

Les problèmes connexes sont https://github.com/vuejs/vue/issues/10485

Suggestion :

Expression rationnelle plus étroite des espaces blancs, comme /[ \t\r\n]+/g .

bug compiler has PR

Commentaire le plus utile

Ne devrait-on pas toucher aux espaces insécables en général? C'est ce à quoi je m'attendrais personnellement si j'en utilisais un dans mon modèle. Cela résoudrait également le problème que vous avez mentionné

Tous les 5 commentaires

Ne devrait-on pas toucher aux espaces insécables en général? C'est ce à quoi je m'attendrais personnellement si j'en utilisais un dans mon modèle. Cela résoudrait également le problème que vous avez mentionné

Configurer le compilateur de modèles Vue avec un espace: 'condenser'. (c'est par défaut pour vue-cli) .

Attendez, je suis confus. Est-ce que condense vraiment la valeur par défaut? Je vois plusieurs choses qui prétendent que preserve est en fait la valeur par défaut.

J'ai eu du mal à comprendre pourquoi aucun de mes espaces insécables ne fonctionne. J'allais essayer de forcer la conservation, mais j'ai ensuite vu:

Evan disant que la valeur par défaut est preserve https://github.com/vuejs/vue/issues/9208#issuecomment -450012518

Et les documents d'option du compilateur qui font écho à cette déclaration https://github.com/vuejs/vue/tree/dev/packages/vue-template-compiler#options

Maintenant, après avoir vu @aimozg dire que condense est en fait la valeur par défaut, je suis allé de l'avant et j'ai défini manuellement preserve et bien sûr! Tout est revenu à la normale!

Les documents / la mise en œuvre sont-ils erronés?

Quoi qu'il en soit, pourquoi condenser éliminerait nbsp? Comportement très inattendu. Je suis d'accord qu'ils ne devraient pas être touchés.

Les espaces blancs sont préservés dans Vue core pour assurer la compatibilité descendante tandis que dans les dernières versions de Vue CLI, nous configurons cela sur condense par défaut.

idem avec l'onglet échappé &#9;

Rend très difficile l'affichage du code

En attente de la fusion de ces éléments.
Solution de contournement actuelle
Utilisation

{{'\xa0'}}

au lieu de

&nbsp;
Cette page vous a été utile?
0 / 5 - 0 notes