235 votes

Limiter la longueur d'une chaîne de caractères avec AngularJS

J'ai les éléments suivants :

<div>{{modal.title}}</div>

Existe-t-il un moyen de limiter la longueur de la chaîne à 20 caractères, par exemple ?

Et une question encore meilleure serait de savoir s'il existe un moyen de modifier la chaîne pour qu'elle soit tronquée et afficher ... à la fin s'il y a plus de 20 caractères ?

3 votes

512voto

Govan Points 609

Voici la correction simple en une ligne sans css.

{{ myString | limitTo: 20 }}{{myString.length > 20 ? '...' : ''}}

79 votes

Simple et élégant. Au lieu de '...' vous pouvez également utiliser l'entité HTML pour les ellipses : '&hellip;'

0 votes

C'est probablement la solution la plus simple. Gardez tout de même à l'esprit que les filtres sont relativement lourds et que cela pourrait avoir des problèmes de performance sur une énorme liste ng-repeat ! :)

1 votes

Génial ! y a-t-il un moyen de couper après un certain nombre de lignes, plutôt qu'après un certain nombre de caractères ?

350voto

EpokK Points 11131

Modifier La dernière version de AngularJS offre limitTo filtre .

Vous avez besoin d'un filtre personnalisé comme ça :

angular.module('ng').filter('cut', function () {
        return function (value, wordwise, max, tail) {
            if (!value) return '';

            max = parseInt(max, 10);
            if (!max) return value;
            if (value.length <= max) return value;

            value = value.substr(0, max);
            if (wordwise) {
                var lastspace = value.lastIndexOf(' ');
                if (lastspace !== -1) {
                  //Also remove . and , so its gives a cleaner result.
                  if (value.charAt(lastspace-1) === '.' || value.charAt(lastspace-1) === ',') {
                    lastspace = lastspace - 1;
                  }
                  value = value.substr(0, lastspace);
                }
            }

            return value + (tail || ' …');
        };
    });

Utilisation :

{{some_text | cut:true:100:' ...'}}

Options :

  • wordwise (booléen) - si vrai, coupe seulement par les limites des mots,
  • max (entier) - longueur maximale du texte, coupée à ce nombre de caractères,
  • tail (chaîne, par défaut : ' ') - ajoute cette chaîne à la chaîne d'entrée d'entrée si la chaîne a été coupée.

Une autre solution : http://ngmodules.org/modules/angularjs-truncate (par @Ehvince)

2 votes

Il y a un équivalent à angular-modules : ngmodules.org/modules/angularjs-truncate

0 votes

Angularjs-truncate n'est pas la solution, mais la vôtre l'est. Merci ! Faites-le comme module !

0 votes

@epokk Il y a un moyen de permettre à l'utilisateur, après avoir cliqué sur les trois points, d'afficher le texte complet non coupé ? Comme un "show more" ? Merci !

63voto

slim Points 151

Je sais que c'est un peu tard, mais dans la dernière version d'angularjs (j'utilise la 1.2.16), le filtre limitTo prend en charge les chaînes de caractères ainsi que les tableaux, de sorte que vous pouvez limiter la longueur de la chaîne de caractères comme ceci :

{{ "My String Is Too Long" | limitTo: 9 }}

qui produira un résultat :

My String

9 votes

Il manque le "..." dans cette solution. Le résultat devrait être : "Ma chaîne..."

0 votes

Je ne vois pas l'ellipse ici : plnkr.co/edit/HyAejS2DY781bqcT0RgV?p=preview . Pouvez-vous préciser ?

2 votes

Ce que @Snæbjørn dit, c'est que la personne qui a posé la question préférait une solution qui insère " ... " à la fin de la chaîne tronquée. C'est ce que fait la réponse de Govan.

53voto

Sushrut Points 723

Vous pouvez simplement ajouter une classe css à la division et ajouter une info-bulle via angularjs pour que le texte coupé soit visible au passage de la souris.

<div class="trim-info" tooltip="{{modal.title}}">{{modal.title}}</div>

   .trim-info {
      max-width: 50px;
      display: inline-block;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;  
      line-height: 15px;
      position: relative;
   }

4 votes

Text-overflow : ellipsis, bien joué.

4 votes

Cette technique, bien que géniale, empêche le texte de s'enrouler.

0 votes

C'est la bonne réponse. Ma règle générale est : "ne pas faire en JavaScript ce qui peut être fait en CSS".

3voto

MAM Points 21

Vous pouvez limiter la longueur d'une chaîne ou d'un tableau en utilisant un filtre. Consultez celui-ci écrit par l'équipe AngularJS.

0 votes

Fournir également quelques détails supplémentaires

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X