一部の文字列でlimitToフィルターを使用しています。文字列がたとえば10文字未満の場合、文字列はそのまま表示されます。文字列が10文字より長い場合、10番目の文字で文字列を切り取った後、楕円を表示します。 angularこれを行うためのショートカットはありますか?ありがとう
例えば:
{{main.title | limitTo:10}}
main.title = "A Good Day"の場合、出力は次のようになります。A Good Day
main.title = "A Terrible Day"の場合、出力は次のようになります。A Terrible ...
必要に応じて、このフィルターを作成できますが、以下のようにngIf
ディレクティブを使用します。
(function() {
'use strict';
angular.module('app', [])
.controller('mainCtrl', function() {
var vm = this;
vm.text = 'Really longer than 10';
});
})();
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.7/angular.min.js"></script>
</head>
<body ng-controller="mainCtrl as ctrl">
Without limit: <span ng-bind="ctrl.text"></span>
<hr>
With limit: <span ng-bind="ctrl.text | limitTo:10"></span>
<span ng-if="ctrl.text.length > 10">...</span>
</body>
</html>
お役に立てれば :
{{ main.title | limitTo: 10 }}{{main.title.length > 10 ? '...' : ''}}
<span ng-class="{'Ellipsis': text.length > limit}">{{text | limitTo:limit}}</span>
を使用
CSSクラス.Ellipsis:after{ content: '...'; }
とスコープ変数limit
を定義する必要があります
[〜#〜] or [〜#〜]
{{ text.length > limit ? ((text | limitTo:limit) + "...") : text }}
(function() {
"use strict";
angular.module('app', [])
.controller('mainCtrl', function($scope) {
$scope.text = "Hello World";
$scope.limit = 10;
});
})();
.Ellipsis:after{ content: '...'; }
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
</head>
<body ng-controller="mainCtrl">
<h3>Using Option1</h3>
<span ng-class="{'Ellipsis': text.length > limit}">{{ text | limitTo:limit }}</span>
<br>
<h3>Using Option2</h3>
<span>{{ text.length > limit ? ((text | limitTo:limit) + "...") : text }}</span>
</body>
</html>
これを行うには、limitTo
に基づいて独自のフィルターを作成するのが最善の方法です。
angular.module('your-module-name').filter('dotsFilter', [
'$filter',
function ($filter) {
/**
* Shorten the input and add dots if it's needed
* @param {string} input
* @param {number} limit
*/
function dotsFilter(input, limit) {
var newContent = $filter('limitTo')(input, limit);
if(newContent.length < input.length) { newContent += '...'; }
return newContent;
}
return dotsFilter;
}
]);
ビューで使用:
{{ model.longTextData | dotsFilter:10 }}
Anglejsを使用した他の回答が既に投稿されているので、簡単なCSSテクニックを紹介します。
(function() {
"use strict";
angular.module('app', [])
.controller('mainCtrl', function($scope) {
$scope.text = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book";
});
})();
span.Ellipsis {
display:inline-block;
width:180px;
white-space: nowrap;
overflow:hidden;
text-overflow: Ellipsis;
}
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
</head>
<body ng-controller="mainCtrl">
<span ng:class="{true:'Ellipsis', false:''}[text.length>=10]" style="max-width: 10ch;">{{text}}</span>
</body>
</html>
<div maxlength="59">
{{row.RequestTitle.length > 59 ? row.RequestTitle.substr(0,59) + '...' : row.RequestTitle}}
</div>
これは便利で実行もできますAngular 5 Material UI
将来読む人は、JSの代わりにCSSの使用を検討するかもしれません。何かのようなもの:
.Ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: Ellipsis;
}