как ограничить количество символов в ng-bind-html в AngularJS?

Как я могу ограничить количество символов для результата ng-bind-html в angularJS? Является ли это возможным?

Например, в файле js есть <span>some text </span>, а $sce и ng-bind-html преобразуются в html.

Я хочу показать som... Как я могу ограничить это?


person m hadadi    schedule 30.11.2014    source источник
comment
Это ваш ответ!!! довольно мило!!   -  person Angel Antonio García Zepeda    schedule 05.01.2017


Ответы (4)


Ограничение AngularJS на использование тегов HTML

У @Sericaia был отличный ответ

Она создает собственный фильтр следующим образом:

angular.module('limitHtml', [])
    .filter('limitHtml', function() {
        return function(text, limit) {

            var changedString = String(text).replace(/<[^>]+>/gm, '');
            var length = changedString.length;

            return length > limit ? changedString.substr(0, limit - 1) : changedString;
        }
    });

А затем использует его в представлении:

<span ng-bind-html="text | limitHtml: maxNumberOfChar"></span>
person Yeysides    schedule 23.09.2015

Вы можете использовать фильтр limiTo в своем контроллере — limitTo fliter.

Контроллер:

app.controller('myCtrl', ['$scope','$sce','$filter',
function($scope, $sce, $filter) {
    var dataObj = [];        
    for(var i = 0; i < data.length; i++){

        var content = $filter('limitTo')(data[i].Content, 150)
        var itemObj = {
            Content: $sce.trustAsHtml(content)
        }
        dataObj.push(itemObj);
    }
    $scope.ngRepeatArray = dataObj;  
}])

HTML

<ul>
    <li ng-repeat="item in ngRepeatArray">
          <p ng-bind-html="item.Content"></p>
    </li>
</ul>

Надеюсь это поможет.

person Mr Rethman    schedule 07.12.2014

Возможно, вам нужно сделать некоторые трюки CSS для представления вашей модели в html. Например, если у вас длинный текст, вы можете ограничить количество строк, например здесь Limit длина текста до n строк с использованием CSS

person Abi-    schedule 01.12.2014

Чтобы добавить «подробнее» или «...» в конце усеченного текста, я добавил небольшую настройку в ответ @Yeysides. расширение @Sericaia "Ограничение AngularJS на использование тегов HTML".

Используйте переменную со строкой suffix, затем вызовите ее.

angular.module('limitHtml', [])
    .filter('limitHtml', function() {
        return function(text, limit) {

            var changedString = String(text).replace(/<[^>]+>/gm, '');
            var length = changedString.length;
            var suffix = ' ...';

            return length > limit ? changedString.substr(0, limit - 1) + suffix : changedString;
        }
    });

А затем использует его в представлении:

<span ng-bind-html="text | limitHtml: maxNumberOfChar"></span>
person mchebib    schedule 06.07.2016
comment
Это работает для AngularJS, а не для Angular 2. Я протестировал и развернул его. Вы проверили, правильно ли срабатывает фильтр? - person mchebib; 21.12.2016
comment
У меня это работает, но я объявил переменную для maxNumberOfChar в области действия контроллера. например $scope.maxNumberOfChar = 100; - person Yorick; 20.11.2018