2016-03-30 19 views
0

Ich bemerke ein Verhalten, das ich nicht beabsichtige. Ich habe eine <textarea> wo, wenn ich etwas Text eingeben kann, wie unten zu sehen.Wie Newline in Angular-Eingaben zu halten

some content 
some other content 
yet another content 

Als ich diesen Text in ein JSON-Objekt bin Speichern und speichern Sie es, was ich bekommen ist:

"value" : "some content some other content yet another content" 

Alternativ werde ich manchmal diese:

"value" : "some content 
some other content  
yet another content" 

Ich schätze, was ich gewesen bin erwartet zu erhalten ist:

"value" : "some content \n 
    some other content \n  
    yet another content" 

So kann ich den Inhalt auf die gleiche Weise wie es eingegeben wurde darstellen.

Aber das scheint meine JSON.parse(string) zu brechen. Ich verwende AngluarJS für Modelle in den Eingängen.

EDIT:

Dies ist, was passiert, wenn ich mein Objekt in einem JSON-Validator setzen: enter image description here

+1

Wie speichern Sie den Textarea Text? –

+0

Ich speichere es in einem Objekt. const data = {text: $ scope.text} dann sende ich es an meinen Server, der es in einer Umdenkdatenbank speichert. Ist es das? Hilft es? –

+0

Gibt es Fehler in Javascript? (Wenn ja, dann ist es ein Problem) ... jetzt, wenn das Problem ist, weil Sie von der Konsole auf eine Website kopieren, können Sie Zitate ersetzen '' durch Backticks '' –

Antwort

1

Sie könnten die Zeilenumbrüche mit etwas anderes versuchen und ersetzen. Wenn die Zeilenumbruchzeichen Probleme mit Ihrer JSON.parse verursachen, versuchen Sie, sie durch etwas anderes wie <br/> zu ersetzen, das wie eine neue Zeile fungiert, wenn Sie die Daten abrufen.

Sie auch JSON.stringify auf Ihrem textarea Wert versuchen könnte, bevor Sie JSON.parse die Ihre textarea Wert auf einen JSON-String mit sichtbaren Zeilenumbrüche umwandeln sollte.

document.getElementById("textarea-id").value.replace(/\n\r?/g, '<br />') 

ODER

JSON.stringify(document.getElementById("textarea-id").value) 

anzeigen console.log ‚s im Beispiel unten: https://jsfiddle.net/fjj2psqj/1/

+0

Mein Problem ist, dass ich nicht sehe In der Datenbank wird nur ein Zeilenumbruch ohne das \ n Zeichen gemacht –

+0

Ja, das neue Zeilenzeichen wird nicht sichtbar sein, aber es existiert in der Zeichenkette.Wenn Sie das ersetzen, wie ich oben getan habe, werden Sie feststellen, dass die neuen Zeilen in Ihrem Textbereich durch
ersetzt werden. –

+0

ok Ich werde es versuchen –

0
// valid JSON 
var data = { 
    "value": [ 
     "line", 
     "line", 
     "line" 
    ] 
}; 

// stringify the data to save it as text 
var dataString = JSON.stringify(data); 

// parse the string and join the array to recover line breaks 
// or iterate over values array depending on your use case 
var withNewLines = JSON.parse(dataString).value.join("\n"); 
0

Sie können Ihre aufgenommenen TextArea- Schnur durch JSON.stringify laufen vor dem Senden auf Ihrem Server und JSON.parse, bevor Sie es erneut in Ihrer Anwendung verwenden.

$scope.doSomethingWithTextareaText = function() { 
    //assuming your textarea is bound to $scope.text 
    $scope.myObject['value'] = $scope.text; 
    $scope.myObject['stringifyValue'] = JSON.stringify($scope.text); 
    /* 
     $scope.myObject[value]: 
     some content 
     some other content 
     yet another content 
     $scope.myObject[stringifyValue]: 
     "some content\nsome other content\nyet another content" 
     JSON.parse($scope.myObject[stringifyValue]): 
     some content 
     some other content 
     yet another content 
    */ 
} 

Siehe http://jsfiddle.net/5d2oekv0/3/.