2013-07-11 4 views
8

Ich habe eine angularJS-Anwendung, in der ich ein Array habe.AngularJS-Format Array-Werte in Textbereich

$scope.data[0] = x1; 
    $scope.data[1] = x2; 

und einen Textbereich

<textarea ng-model="data"> </textarea> 

I die, dass TextArea- enthält Werte x1, x2 (getrennt durch Komma) sehen kann. Ich möchte die Werte in separaten Zeilen anzeigen. Das bedeutet, dass alle Array-Werte durch ein neues Zeilenzeichen und nicht durch ein Komma getrennt sein sollten. Muss ich Filter dafür schreiben?

+0

U-Filter versuchen und wenn es nicht, fragen Sie wieder funktioniert :) Warum hast du diese Lösung nicht versucht? –

+0

Ich denke, es tut ToString auf dem Array, um x1, x2 zurückzugeben. Sie müssen einen Filter dafür erstellen. – Chandermani

Antwort

15

Sie können eine Anweisung schreiben, die ändert, wie ng-model Variablen in Eingabewerte und zurück konvertiert. Ich schreibe nur, um die Spitze von meinem Kopf ab, so ich habe keine Ahnung, ob es genau richtig, aber so etwas wie dies könnte es tun:

app.directive('splitArray', function() { 
    return { 
     restrict: 'A', 
     require: 'ngModel', 
     link: function(scope, element, attr, ngModel) { 

      function fromUser(text) { 
       return text.split("\n"); 
      } 

      function toUser(array) {       
       return array.join("\n"); 
      } 

      ngModel.$parsers.push(fromUser); 
      ngModel.$formatters.push(toUser); 
     } 
    }; 
}); 

Und Sie können es wie folgt verwenden:

<textarea ng-model="data" split-array> </textarea> 
+1

Sie können diese Antwort für weitere Beispiele für Formatierer und Parser suchen: http://StackOverflow.com/Questions/11616636/How-to-Do-Two-way-Filtering-in-angular-JS –

15

Das ist genau das, was ng-list tut:

<textarea ng-model="someArray" ng-list="/\n/"></textarea> 

Dies gilt auch für alle anderen Arten von Eingaben funktioniert, wie es ngModels in Parsern/Formatierer hakt.

Sehen Sie diese Geige: http://jsfiddle.net/xbYzT/1/

Das Problem dabei ist, dass ng-Liste schließt sich immer mit a ‚‘ als Trennzeichen, es ist also nicht wirklich bi-direktional.

+1

Das einzige Problem mit diesem ist, dass 'ngList' immer ein vorhandenes Array mit', 'als Trennzeichen verbindet und dabei das vom Benutzer ausgewählte Trennzeichen ignoriert - auch wenn es sich nicht um eine Regex handelt. –

+0

Ted: Ja, das ist ein hässliches Problem - und es ist nicht einfach zu beheben, da man das Teilen durch Regexp nicht wirklich rückgängig machen kann. Der Kommentar wurde aktualisiert, um das zu berücksichtigen. –

+1

AngularJS 1.3 entfernt die Unterstützung für Regexes in ngSplit, was es zu einem strittigen Punkt macht. –

11

ein viel einfacherer Weg, dies zu tun in Angular> = 1,3, die in beiden Richtungen funktionieren:

<textarea ng-model="yourStringArray" ng-list="&#10;" ng-trim="false"></textarea> 

Plunker

+1

Das braucht wirklich mehr upvotes. Was für eine großartige Antwort. –

+0

sehr schöne Braue! –

+0

@AlisomMartins, danke, deine Augenbraue sieht auch gut aus. –