使用AngularJS限制字符串的长度

Ala*_*an2 224 filter angularjs angularjs-filter

我有以下内容:

<div>{{modal.title}}</div>
Run Code Online (Sandbox Code Playgroud)

有没有办法可以将字符串的长度限制为20个字符?

还有一个更好的问题是,有一种方法可以将字符串更改为截断并...在结尾显示它是否超过20个字符?

Gov*_*van 493

这是没有css的简单的一行修复.

{{ myString | limitTo: 20 }}{{myString.length > 20 ? '...' : ''}}
Run Code Online (Sandbox Code Playgroud)

  • 简单而优雅.而不是''...'`你也可以使用HTML实体进行省略:`'&hellip;'` (78认同)

Epo*_*okK 342

编辑 最新版本的AngularJS报价limitTo过滤器.

您需要这样的自定义过滤器:

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 || ' …');
        };
    });
Run Code Online (Sandbox Code Playgroud)

用法:

{{some_text | cut:true:100:' ...'}}
Run Code Online (Sandbox Code Playgroud)

选项:

  • wordwise(boolean) - 如果为true,则仅按字边界切割,
  • max(整数) - 文本的最大长度,减少到这个字符数,
  • tail(string,default:'...') - 如果字符串被剪切,则将此字符串添加到输入字符串.

另一个解决方案:http://ngmodules.org/modules/angularjs-truncate(@Ehvince)

  • 角度模块有一个等价物:http://ngmodules.org/modules/angularjs-truncate (2认同)

sli*_*lim 58

我知道这已经很晚了,但是在最新版本的angularjs中(我使用的是1.2.16),limitTo过滤器支持字符串和数组,因此你可以像这样限制字符串的长度:

{{ "My String Is Too Long" | limitTo: 9 }}
Run Code Online (Sandbox Code Playgroud)

这将输出:

My String
Run Code Online (Sandbox Code Playgroud)

  • 这个解决方案缺少"......".结果应该是:"我的字符串..." (9认同)
  • @Snæbjørn所说的是,提出问题的人更喜欢在截断的字符串末尾插入"..."的解决方案.Govan的回答是这样的. (2认同)

Sus*_*rut 52

您可以简单地向div添加一个css类,并通过angularjs添加一个工具提示,以便在鼠标悬停时可以看到修剪过的文本.

<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;
   }
Run Code Online (Sandbox Code Playgroud)

  • 文本溢出:省略号,很好. (4认同)
  • 这种技术,虽然很棒,但可以防止文本被包装 (4认同)
  • 这仅适用于每个段落一行的文本.请参阅多行https://css-tricks.com/line-clampin/(并非所有浏览器都支持). (4认同)

crc*_*442 27

我遇到了类似的问题,这就是我所做的:

{{ longString | limitTo: 20 }} {{longString.length < 20 ? '' : '...'}}
Run Code Online (Sandbox Code Playgroud)


Ana*_*nam 18

更优雅的解决方案

HTML:

<html ng-app="phoneCat">
  <body>
    {{ "AngularJS string limit example" | strLimit: 20 }}
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

角度代码:

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

 phoneCat.filter('strLimit', ['$filter', function($filter) {
   return function(input, limit) {
      if (! input) return;
      if (input.length <= limit) {
          return input;
      }

      return $filter('limitTo')(input, limit) + '...';
   };
}]);
Run Code Online (Sandbox Code Playgroud)

演示:

http://code-chunk.com/chunks/547bfb3f15aa1/str-limit-implementation-for-angularjs


Thi*_*újo 17

< div >{{modal.title | limitTo:20}}...< / div>
Run Code Online (Sandbox Code Playgroud)


mni*_*chi 15

由于我们只在字符串长度超过限制时才需要省略号,所以通过使用而ng-if不是绑定来添加省略号似乎更合适.

{{ longString | limitTo: 20 }}<span ng-if="longString.length > 20">&hellip;</span>
Run Code Online (Sandbox Code Playgroud)


小智 7

有一个选择

.text {
            max-width: 140px;
            white-space: nowrap;
            overflow: hidden;
            padding: 5px;
            text-overflow: ellipsis;(...)
        }
Run Code Online (Sandbox Code Playgroud)
<div class="text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi qui soluta labore! Facere nisi aperiam sequi dolores voluptatum delectus vel vero animi, commodi harum molestias deleniti, quasi nesciunt. Distinctio veniam minus ut vero rerum debitis placeat veritatis doloremque laborum optio, nemo quibusdam ad, sed cum quas maxime hic enim sint at quos cupiditate qui eius quam tempora. Ab sint in sunt consequuntur assumenda ratione voluptates dicta dolor aliquid at esse quaerat ea, veritatis reiciendis, labore repellendus rem optio debitis illum! Eos dignissimos, atque possimus, voluptatibus similique error. Perferendis error doloribus harum enim dolorem, suscipit unde vel, totam in quia mollitia.</div>
Run Code Online (Sandbox Code Playgroud)


mau*_*lus 6

我发现,仅用于限制字符串长度的最简单解决方案{{ modal.title | slice:0:20 }},然后从上述@Govan借用,{{ modal.title.length > 20 ? '...' : ''}}如果字符串长于20,则可以用来添加悬浮点,因此最终结果很简单:

{{ modal.title | slice:0:20 }}{{ modal.title.length > 20 ? '...' : ''}}

https://angular.io/docs/ts/latest/api/common/index/SlicePipe-pipe.html