2016-03-24 6 views
1

Ich habe eine Liste von Objekten, die alle Parameter in einer Tabelle mit ng-repeat angezeigt haben.cut string length des Objektparameters in ng-repeat

Gelegentlich wird der Title-Parameter eines Objekts sehr lang sein und daher die Tabelle an bestimmten Stellen strecken. Ich habe versucht, mit Filter, aber ich denke, dass würde die Zeilen in der Tabelle, nicht die Zeichen eines zufälligen Objekt-Parameter abgeschnitten.

Gibt es eine Möglichkeit, diesen Titel auf eine bestimmte Länge zu kürzen und "..." am Ende hinzufügen? Entschuldigung, wenn das schon einmal gefragt wurde, aber meine Forschung fand keine Antworten, die ich brauchte.

+5

Dies sollte auf der 'css' Ebene mit' text-overflow: ellipsis; 'gelöst werden. – Daniel

Antwort

1

Sie können eine JavaScript-Funktion schreiben eine maximale Länge des Textes zu erzwingen:

$scope.forceMaxLength = function(s, maxLength) { 
    if(s.length > maxLength) { 
     return Array.prototype.slice.apply(s, [0, maxLength-3]).join('') + '...'; 
    } else { 
     return s; 
    } 
} 

Jetzt können Sie diese einfach in Ihre Winkel Vorlage verwenden:

<div ng-repeat="item in items"> 
     <h3>{{ forceMaxLength(item.title, 25) }}</h3> 
    </div> 

Having said that, mit text-overflow: ellipsis; in Ihrem CSS wäre wahrscheinlich eine bessere Lösung.

Der Grund dafür ist, dass Text eine Breite hat, die sich aus der Summe der Breite jedes Zeichens zusammensetzt, und die Zeichenbreiten können variieren.

Diese beiden Saiten haben beide vierunddreißig Zeichen:

iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

Wenn Sie diese Strings abschneiden wollte, so dass sie in eine bestimmte Breite passen würde, würden Sie möchte, dass der abgeschnittene Punkt an verschiedenen Positionen in den jeweiligen Strings ist.

+0

Ich weiß es wirklich zu schätzen, ich habe meinen ersten Vorschlag gemacht. Während ich lieber Ellipse verwendet hätte, beeinflusste das Styling die Größe des Bereichs, in dem sich der Text befand, und nicht den Text selbst. Ich bin wirklich glücklich mit dieser Lösung, da nun jeder Parameter, der diese Länge hat, verkürzt wird, wodurch die Linien viel sichtbarer werden. – byteGeist