Я хочу обрезать текст после ng-repeat, законченного в угловом.Усекать текст после ng-repeat
Я нашел простой способ использовать limitTo фильтр для ограничения длины текста. Однако, я хочу повернуть текст по фактической ширине.
со ссылкой на странице ниже, вот мой код: Calling a function when ng-repeat has finished
HTML:
<div id="feedList">
<div ng-repeat="feed in feeds | orderBy: '-date' " feed-list-repeat-directive>
<h4><span>{{ feed.title }}</span></h4>
<!-- some more contents here -->
</div>
</div>
Javascript:.
var app = angular.module('anApp', []);
app.controller('anCtrl', function($scope, $http) {
$http.get("data.php")
.success(function(response) {
$scope.feeds = response.feeds;
});
$scope.$on('ngRepeatFinished', function(ngRepeatFinishedEvent) {
// truncate text by width #####################################
for(a=0; a<$('#feedList > div').length; a++){
$thisH4 = $('#feedList > div').eq(a).children('h4');
if($thisH4.width()<$thisH4.children('span').width()){
var txt = $thisH4.children('span').text();
while($thisH4.width()<$thisH4.children('span').width()){
txt = txt.substr(0,txt.length-1);
$thisH4.children('span').text(txt+'...');
}
};
};
//#######################################################
});
})
.directive('feedListRepeatDirective', function($timeout){
return {
restrict: 'A',
link: function(scope, element, attrs) {
if (scope.$last){
$timeout(function() {
scope.$emit('ngRepeatFinished');
});
};
}
}
});
Проблема заключается в том, когда $ сфера $ на ('ngRepeatFinished'), данные фактически не загружаются в dom, $ thisH4.children ('span'). width() возвращает 0,
Работает только в том случае, если setTimeout() установлен на 0,4 с, но я думаю, что это не смысл.
Есть ли способ решить проблему или я лучше придерживаюсь limitTo фильтра?
благодарит
Здравствуйте, Он отлично работает, когда я играю на странице plunker. Но я не знаю, почему это не работает на моей фактической странице. когда я ставил предупреждение (элемент [0] .clientWidth + ":" + element [0] .scrollWidth); в функции overflowPercentage, это предупреждение «XXX: 150» на plunker, , но он предупреждает «0: 0» на моей странице. – Wesleywai
Действительно ли это в '$ timeout'? Причина, по которой я помещаю ее в '$ timeout', не имеет времени, это просто поставить ее в очередь на следующий цикл digest, по существу ожидая рендеринга DOM, чтобы я мог получить ширину – user2718281
не в $ timeout, а в var overflowPercentage = function() {...} оба элемента [0] .scrollWidth и element [0] .clientWidth возвращает 0 мою фактическую страницу. – Wesleywai