Limit the length of a string with AngularJS

angularjs, angularjs-filter, filter

Solution

Edit The latest version of `AngularJS`offers `limitTo` filter.

You need a custom filter like this:

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 || ' …');
        };
    });

Usage:

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

Options:

- wordwise (boolean) - if true, cut only by words bounds,

- max (integer) - max length of the text, cut to this number of chars,

- tail (string, default: ' …') - add this string to the input string if the string was cut.

Another solution: http://ngmodules.org/modules/angularjs-truncate (by @Ehvince)

Problem

I have the following: ``` <div>{{modal.title}}</div> ``` Is there a way that I could limit the length of the string to say 20 characters? And an even better question would be is there a way that I could change the string to be truncated and show `...` at the end if it's more than 20 characters?

Original source

Related problems