Vue: С помощью `whitespace: condense` все & nbsps ;, даже значимые, преобразуются в пробелы

Созданный на 29 янв. 2020  ·  5Комментарии  ·  Источник: vuejs/vue

Версия

2.6.11

Ссылка для воспроизведения

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

Действия по воспроизведению

Запустите example.js в Node.

Альтернативные шаги / подробное объяснение:

  1. Настройте компилятор шаблонов Vue с помощью whitespace: 'condense' . (по умолчанию для vue-cli).
  2. Рендеринг шаблона с сущностью &nbsp; , например <p>a&nbsp;b</p>
  3. Проверить шаблон на наличие фактического неразрывного пробела

Что ожидается?

&nbsp; объект отображается как неразрывный пробел; Вывод example.js должен содержать

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

Что на самом деле происходит?

&nbsp; entity отображается как обычное пространство, вывод example.js содержит

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

Этот код компилятора удаляет пробелы:

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

и "&nbsp;" s заменяются на "\xA0" s с ранее использованным декодером сущностей.

Связанные вопросы https://github.com/vuejs/vue/issues/10485

Предложение :

Более узкие пробелы RE regexp, например /[ \t\r\n]+/g .

bug compiler has PR

Самый полезный комментарий

Разве нельзя вообще трогать неразрывные пространства? Это то, чего я лично ожидал бы, если бы использовал его в своем шаблоне. Это также решит проблему, о которой вы упомянули

Все 5 Комментарий

Разве нельзя вообще трогать неразрывные пространства? Это то, чего я лично ожидал бы, если бы использовал его в своем шаблоне. Это также решит проблему, о которой вы упомянули

Установите компилятор шаблонов Vue с пробелом: 'condense'. (по умолчанию для vue-cli) .

Подождите, я в замешательстве. condense действительно используется по умолчанию? Я вижу несколько вещей, которые утверждают, что preserve на самом деле является значением по умолчанию.

Я изо всех сил пытался понять, почему ни одно из моих неразрывных пространств не работает. Я собирался попробовать принудительно сохранить, но тут увидел:

Эван говорит, что по умолчанию это preserve https://github.com/vuejs/vue/issues/9208#issuecomment -450012518.

И документы параметров компилятора, которые повторяют этот оператор https://github.com/vuejs/vue/tree/dev/packages/vue-template-compiler#options

Теперь, увидев, что @aimozg говорит, что condense на самом деле используется по умолчанию, я пошел дальше и вручную установил preserve и, конечно же! Все вернулось в норму!

Документы / реализация неверны?

В любом случае, зачем конденсировать устранять nbsp? Очень неожиданное поведение. Я согласен, их нельзя трогать.

Пробелы сохраняются в ядре Vue для обеспечения обратной совместимости, в то время как в последних версиях Vue CLI мы по умолчанию устанавливаем для него значение condense .

то же самое с экранированной вкладкой &#9;

Очень сложно отобразить код

Жду слияния ...
Текущее решение
Использовать

{{'\xa0'}}

вместо

&nbsp;
Была ли эта страница полезной?
0 / 5 - 0 рейтинги