Vue: Nicht unterbrechendes Leerzeichen verhält sich anders als andere Zeichen - gibt "" in der Vorlage aus, wenn es über Requisiten übergeben wird

Erstellt am 4. Okt. 2018  ·  11Kommentare  ·  Quelle: vuejs/vue

Ausführung

2.5.17

Reproduktionslink

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

Schritte zum Reproduzieren

  1. Erstellen Sie eine neue Komponente, die eine String-Requisite akzeptiert.
  2. Zeigen Sie die Requisite in der Vorlage der Komponente an.
  3. Verwenden Sie die Komponente in einer Vue-Anwendung und übergeben Sie eine Zeichenfolge, die ein nicht unterbrechendes Leerzeichen für die Requisite enthält.

Was wird erwartet?

Die Ausgabe sollte ein nicht unterbrechendes Leerzeichen enthalten

Was passiert eigentlich?

Die Ausgabe zeigt  


In dem Beispiel habe ich 3 Fälle gemacht

  • Der erste Fall ist, dass aus    
  • Der zweite Fall ist, dass in einer langen Liste von UTF-8-Zeichen nur NON-BREAKING SPACE maskiert wird.
  • Und drittens, wenn Sie dieselbe Liste von Charakteren erhalten, diese aber von einem regulären HTMLElement mit document.querySelector('#test').title der Charakter nicht entkommen.

Hinweis : Wenn Sie das nicht unterbrechende Leerzeichen kopieren, wird es möglicherweise zu einem regulären Leerzeichen in der Zwischenablage. Verwenden Sie daher https://en.wikipedia.org/wiki/Non-breaking_space#Keyboard_entry_methods , um sicherzustellen, wie das Zeichen eingefügt wird.

bug

Hilfreichster Kommentar

Versuchen Sie als Problemumgehung, den JS-Escape-Code für   - \xa0

hier gefunden, arbeitete für mich in der Nonbreakinspacification Funktion

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

Von dieser Funktion zurückgegebene Zeichenfolgen werden mit &nbsp s anstelle von Leerzeichen gerendert.

Alle 11 Kommentare

Ich habe ein neues Beispiel hinzugefügt, in dem in einer Liste von HTML-Entitäten (einschließlich anderer Leerzeichen und Zeichen mit der Breite Null) nur   nicht dekodiert wurden.

Ich habe auch bemerkt, dass es in mathiasbynens / he zwei Einträge für   einen ohne Simicolon und einen mit Simicolon.

Könnte ein Schuss in die Dunkelheit sein, aber könnte dies einen Einfluss auf das obige Ergebnis haben?

Ich habe versucht, mit mathiasbynens / he v1.1.1 Inkonsistenzen mit   , konnte aber keine finden.

Ich habe versucht, meine vorherigen jsfiddles zu duplizieren, um zu sehen, ob   anders reagieren würde.

Wenn mir jemand Hinweise geben kann, wo ich nach diesem Fehler suchen soll, bin ich mehr als glücklich, es zu versuchen.

Ich würde mich auch über jede Antwort zu diesem Thema sehr freuen.

Sieht für mich nach einem Fehler aus - eine Lösung wäre schön

Ich habe gelegentlich Probleme mit × bemerkt. Angenommen, eine Komponenten-Requisite hat einen Standardwert von × , der in der Komponente (v-html) gerendert wird. Beim Rendern wird das tatsächliche Zeichen x angezeigt und eine SSR-Hydratationskaution verursacht.

Anderes Beispiel: https://jsfiddle.net/onbzk0m6/ (Zeichen)

Ja - es scheint verwandt zu sein, wie Vue HTML-Attribute im Allgemeinen analysiert.

Ich habe ein ähnliches Beispiel basierend auf @approached Beispiel gemacht
https://jsfiddle.net/onbzk0m6/3/

Versuchen Sie als Problemumgehung, den JS-Escape-Code für   - \xa0

hier gefunden, arbeitete für mich in der Nonbreakinspacification Funktion

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

Von dieser Funktion zurückgegebene Zeichenfolgen werden mit &nbsp s anstelle von Leerzeichen gerendert.

Ich bin auf dasselbe Problem gestoßen: Die HTML-Entität führt zu "" als Text, wenn sie in Vorlagen anstelle des weichen Bindestrichs verwendet wird. Das gleiche gilt für "" und andere.
Vue 2.6.10

für Leute, die nach einer Problemumgehung suchen:
Beim Übergeben einer Zeichenfolge mit nicht unterbrechenden Leerzeichen als Requisite habe ich die Leerzeichen durch Zeichen ersetzt, die wahrscheinlich nicht Teil der Zeichenfolge sind, in meinem Fall 'zzz'.
var newName = program_name.replace(/\s/g,'zzz');

Dann habe ich in der eigentlichen Komponente, in der ich diese Requisite anzeigen oder verwenden muss, eine berechnete Funktion, die die obige Aktion rückgängig macht und die Platzhalterzeichen wieder durch Leerzeichen ersetzt

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 Entschuldigung, ich habe eine Lösung für dieses Problem gefunden.

Nach meinem Fix ist das Verhalten von Vue das gleiche wie bei HTML, genau wie im folgenden Screenshot.

Kann ich dieses Problem aufgreifen und eine Pull-Anfrage stellen?

image

image

Sicher @JuniorTour

Dieses Problem kann mit https://github.com/vuejs/vue/issues/10485 und https://github.com/vuejs/vue/issues/11059 zusammenhängen
Es lohnt sich also, auch einen Blick auf die vorhandenen PRs zu werfen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen