Vue: O espaço ininterrupto atua de maneira diferente dos outros caracteres - produz "" no modelo quando passado por adereços

Criado em 4 out. 2018  ·  11Comentários  ·  Fonte: vuejs/vue

Versão

2.5.17

Link de reprodução

https://codepen.io/avertes/pen/LYYpNRe
https://jsfiddle.net/50wL7mdz/756973/

Passos para reproduzir

  1. Crie um novo componente que aceite um suporte de string.
  2. Exibe o adereço dentro do modelo do componente.
  3. Use o componente em um aplicativo Vue e passe uma string contendo um caractere de espaço ininterrupto para o prop.

O que é esperado?

A saída deve conter um espaço não separável

O que realmente está acontecendo?

A saída mostra  


No exemplo fornecido, fiz 3 casos

  • O primeiro caso é que   foi transformado em  
  • O segundo caso é que em uma longa lista de caracteres UTF-8, apenas NON-BREAKING SPACE tem escape.
  • E terceiro, ao obter a mesma lista de caracteres, mas recuperando-a de um HTMLElement normal com document.querySelector('#test').title o caractere não é escape.

Nota : Ao copiar o caractere de espaço sem quebra, ele pode se transformar em um espaço regular na área de transferência. Portanto, use https://en.wikipedia.org/wiki/Non-breaking_space#Keyboard_entry_methods para ter certeza de como inserir o caractere.

bug

Comentários muito úteis

como solução alternativa, tente colocar o código de escape JS para   - \xa0

encontrado aqui , funcionou para mim na função nonbreakinspacification

    public static noBreakingSpaces(str: string): string {
        return str.replace(' ', '\xa0');
    }

strings retornadas por esta função estão sendo renderizadas com &nbsp s em vez de espaços.

Todos 11 comentários

Eu adicionei um novo exemplo - onde em uma lista de entidades html (incluindo outros espaços em branco e caracteres de largura zero) - apenas   não decodificado.

Também notei que em mathiasbynens / he existem duas entradas para   uma sem simicolon e outra com simicolon.

Pode ser um tiro no escuro, mas isso pode ter alguma influência no resultado acima?

Tentei usar mathiasbynens / he v1.1.1 para encontrar inconsistências com   , mas não consegui encontrar nenhuma.

Eu tentei duplicar meus jsfiddles anteriores, para ver se   reagiria de forma diferente.

Se alguém puder me dar algumas dicas de onde procurar esse erro, estou mais do que feliz em tentar.

Eu também apreciaria muito qualquer resposta sobre o assunto.

Parece um bug para mim - uma correção seria bom

Eu percebi problemas com × ocasionalmente. digamos que um componente prop tenha um padrão de × , que é renderizado no componente (v-html). Ao renderizar, ele mostra o caractere x real e causa uma queda de hidratação SSR.

Outro exemplo: https://jsfiddle.net/onbzk0m6/ (personagem)

Sim - parece estar relacionado à maneira como o Vue analisa os atributos html em geral.

Eu fiz um exemplo semelhante com base no exemplo
https://jsfiddle.net/onbzk0m6/3/

como solução alternativa, tente colocar o código de escape JS para   - \xa0

encontrado aqui , funcionou para mim na função nonbreakinspacification

    public static noBreakingSpaces(str: string): string {
        return str.replace(' ', '\xa0');
    }

strings retornadas por esta função estão sendo renderizadas com &nbsp s em vez de espaços.

Me deparei com o mesmo problema: a entidade html resulta em "" como texto quando usada em modelos em vez do hífen suave. O mesmo para "" e outros.
Vue 2.6.10

para quem está procurando uma solução alternativa para isso:
Ao passar uma string com espaços não separáveis ​​como suporte, apenas substituí os espaços por caracteres que provavelmente não fazem parte da string, no meu caso 'zzz'
var newName = program_name.replace(/\s/g,'zzz');

Então, no componente real onde eu preciso exibir ou usar este prop, eu tenho uma função computada que desfaz a ação acima e substitui os caracteres do marcador por espaços novamente

correctedProgramName(){ //this reverses the space-replacing we had to do in reporting-dashboard.js
        let correctedProgramName = this.program_name.replace(/zzz/g, ' ')
        return correctedProgramName
      }

@posva Desculpe incomodá-lo, encontrei uma solução para este problema.

Após minha correção, o comportamento do Vue será o mesmo do HTML, assim como a imagem abaixo,

Posso pegar esse problema e fazer uma solicitação pull?

image

image

Claro, @JuniorTour

Esse problema pode estar relacionado a https://github.com/vuejs/vue/issues/10485 e https://github.com/vuejs/vue/issues/11059
Portanto, também vale a pena dar uma olhada nos RP

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