Vue: Com `whitespace: condense` todos os & nbsps ;, mesmo os significativos, são convertidos em espaços

Criado em 29 jan. 2020  ·  5Comentários  ·  Fonte: vuejs/vue

Versão

2.6.11

Link de reprodução

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

Passos para reproduzir

Execute example.js no Node.

Etapas alternativas / explicação detalhada:

  1. Configure o compilador de modelo Vue com whitespace: 'condense' . (é o padrão para vue-cli).
  2. Renderizar o modelo com &nbsp; entidade, por exemplo, <p>a&nbsp;b</p>
  3. Inspecione o modelo para o caractere de espaço real sem quebra

O que é esperado?

&nbsp; entidade processada como caractere de espaço sem quebra; A saída de example.js deve conter

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

O que realmente está acontecendo?

&nbsp; entity é processado como espaço simples, a saída example.js contém

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

O espaço em branco é eliminado por este código do compilador:

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

e "&nbsp;" s são substituídos por "\xA0" s com o decodificador de entidade anterior.

Os problemas relacionados são https://github.com/vuejs/vue/issues/10485

Sugestão :

Expressão regular RE de espaços em branco mais estreitos, como /[ \t\r\n]+/g .

bug compiler has PR

Comentários muito úteis

Não deveríamos tocar em espaços inquebráveis ​​em geral? Isso é o que eu esperaria pessoalmente se usar um em meu modelo. Também resolveria o problema que você mencionou

Todos 5 comentários

Não deveríamos tocar em espaços inquebráveis ​​em geral? Isso é o que eu esperaria pessoalmente se usar um em meu modelo. Também resolveria o problema que você mencionou

Configure o compilador de modelo Vue com espaço em branco: 'condensar'. (é o padrão para vue-cli) .

Espere, estou confuso. condense realmente o padrão? Estou vendo várias coisas que afirmam que preserve é na verdade o padrão.

Tenho lutado para descobrir por que nenhum dos meus espaços inquebráveis ​​está funcionando. Eu ia tentar forçar a preservação, mas então vi:

Evan dizendo que o padrão é preserve https://github.com/vuejs/vue/issues/9208#issuecomment -450012518

E os documentos de opção do compilador que ecoam essa declaração https://github.com/vuejs/vue/tree/dev/packages/vue-template-compiler#options

Agora, depois de ver @aimozg dizer que condense é realmente o padrão, fui em frente e configurei manualmente preserve e com certeza! Tudo voltou ao normal!

Os documentos / implementação estão errados?

De qualquer maneira, por que condensar eliminaria nbsp? Comportamento muito inesperado. Eu concordo que eles não devem ser tocados.

Os espaços em branco são preservados no núcleo do Vue para garantir a compatibilidade com versões anteriores, enquanto nas versões mais recentes do Vue CLI configuramos isso para condense por padrão.

o mesmo com a guia de escape &#9;

Torna muito difícil exibir o código

Esperando que isso seja mesclado ...
Solução alternativa atual
Usar

{{'\xa0'}}

ao invés de

&nbsp;
Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

fergaldoyle picture fergaldoyle  ·  3Comentários

seemsindie picture seemsindie  ·  3Comentários

paceband picture paceband  ·  3Comentários

bdedardel picture bdedardel  ·  3Comentários

wufeng87 picture wufeng87  ·  3Comentários