2015-10-04 2 views
2

Я хочу ограничить количество символов, которые отображаются, когда «ng-repeat» отображает данные JSON. Это приложение использует AngularJS внутри рамки RoR. В настоящее время у меня есть следующий код, который отображает каждый «item.description», но не ограничивает количество символов в строке до длины 25.Как ограничить символы строки с помощью AngularJS

HTML:

<div ng-controller="MyController"> 
    <ul> 
    <li ng-repeat="item in artists"> 
    {{item.description | limitTo:25}} 
    </li> 
    </ul> 
</div> 

Контроллер:

var myApp = angular.module('myApp', []); 

myApp.controller("MyController", function MyController($scope, $http){ 
$http.get("/assets/data.json").success(function(data){ 
    $scope.artists = data; 
    }); 

Я также попытался поставить «limitTo:» вариант в «нг-повтора», но ограничивал количество «item.description (ов)», отображаемого, и не ограничивал ул ING/содержание. Я соблюдал следующие инструкции: https://docs.angularjs.org/api/ng/filter/limitTo

+1

отлично работает в документах демо, так что же другое? Создайте демоверсию, которая реплицирует проблему. У нас есть способ воспроизвести это – charlietfl

+0

. Думаю, единственное отличие заключается в том, что я использую AngularJS в приложении Rails. Вот проект: https://github.com/ctpelnar1988/TimelessEsthetics – Ctpelnar1988

+0

какую версию вы используете? Возможно, он старше, чем когда был введен «limitTo»? – charlietfl

ответ

5

Существует лучший способ сделать это

добавить свойство string «s prototype object, чтобы обрезать строку

/** 
* extends string prototype object to get a string with a number of characters from a string. 
* 
* @type {Function|*} 
*/ 
String.prototype.trunc = String.prototype.trunc || 
function(n){ 

    // this will return a substring and 
    // if its larger than 'n' then truncate and append '...' to the string and return it. 
    // if its less than 'n' then return the 'string' 
    return this.length>n ? this.substr(0,n-1)+'...' : this.toString(); 
}; 

и это, как мы используем его в HTML

..... 
<li ng-repeat="item in artists"> 
    // call the trunc property with 25 as param 
    {{ item.description.trunc(25) }} 
</li> 
..... 

здесь DEMO

+1

Это решило проблему очень хорошо, спасибо! – Ctpelnar1988

+1

:) рад помочь вам, и я обновляю ответ с демо, пожалуйста, проверьте :) –

+2

Отличная демонстрация! На ваш ответ будет много людей :) – Ctpelnar1988

4

Это может быть решение вашей проблемы. Не самый лучший, но вариант:

{{ item.description | limitTo: 25 }}{{item.description.length > 25 ? '...' : ''}} 

Я не пробовал, но я думаю, что это можно сработать.

+0

По какой-то причине, когда я реализовал: {{item.description | limitTo: 25}} {{item.description.length> 25? '...': ''}} AngularJS полностью перестает работать, отображая такие вещи: Добро пожаловать, {{name}}. – Ctpelnar1988

+1

@ Ctpelnar1988 hmm ok ... Я буду искать другие решения. – yuro

+0

Он работал для меня без каких-либо проблем, thanx – Haris

Смежные вопросы