2013-10-04 7 views
9

mam długi tekst tak: -jak wyświetlić długi tekst z większą liczbą przycisków za pomocą kątowego?

„5 prostych kroków, aby poprawić pacjenta Experience5 Proste kroki w celu poprawy pacjenta Experience5 Proste kroki w celu poprawy pacjenta Experience5 Proste kroki w celu poprawy pacjenta Experience5 Proste kroki w celu poprawy pacjenta Experience5 proste kroki, aby poprawić Doświadczenie pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta5 Proste kroki w celu poprawy doświadczenia pacjenta "

Potrzebuję tylko 2 linii do pokazania na stronie i więcej przycisku do sprawdzenia kompletnego tekstu. Czy to jest posible z angular.js?

jeśli tak Co byś mi zasugerował?

Odpowiedz

16

Tak, jest to całkowicie możliwe z AngularJS - ale większość rozwiązania to w rzeczywistości CSS.

Będziesz mógł to zrobić głównie poprzez CSS. Po pierwsze HTML/CSS nie ma pojęcia, ile linii zajmuje cały tekst. Możesz uzyskać pożądane zachowanie, ustawiając wysokość elementu kontenera i wysokość linii tekstu na CSS line-height. Dla swojego stanu domyślnego ustaw wysokość na podstawie dwukrotności wysokości twojej linii i ustaw ukryty overflow. Wtedy po prostu trzeba mieć swój przycisk warunkowo zastosować klasę, która rozszerza wysokość pojemnika i ustawia overflow się widoczny:

<style> 
    .container { 
     font-size: 16px; 
     line-height: 16px; 
     height: 32px; 
     overflow: hidden; 
    } 
    .show { 
     overflow: visible; 
     height: auto; 
    } 
<div class="container" ng-class="{show: show}"> 
    [your text] 
</div> 
<button ng-click="show = true">Show text</button> 

można uzyskać ozdobnego i uczynić przycisk również ukryć tekst ponownie (jak przełączyć) .

+0

chcę pokazać „Pokaż tekst” przycisk tylko wtedy, gdy rzeczywiście tekst przelewa i ukryć go, jeśli tego nie robi. Jak możemy to zrobić? @Benmj –

+0

Dziękuję za odpowiedź, uwielbiam jak mogę to przekazać projektantowi, który zadał mi dzisiaj dokładnie to pytanie. Jednak twój przykład będzie jeszcze lepszy, jeśli wybierzesz inną nazwę dla zmiennej zasięgu i klasy css.Dla osób niezbyt zaznajomionych z programowaniem, które "pokazują", które mogą nie być tak jednoznaczne, jak ci się wydaje ;-) –

3

skośne odczytu więcej
https://github.com/ismarslomic/angular-read-more

Demo
http://codepen.io/ismarslomic/pen/yYMvrz

<div hm-read-more 
     hm-text="{{ text }}" 
     hm-limit="100" 
     hm-more-text="read more" 
     hm-less-text="read less" 
     hm-dots-class="dots" 
     hm-link-class="links"> 
</div> 
+0

Dobrze, dziękuję :) –

+0

jak zrobić więcej i przeczytać mniej tekstu w następnej linii. –

+0

@GopalRohila Nie wydaje się możliwe umieszczenie Czytaj więcej i Czytaj mniej w następnym wierszu z bieżącą funkcjonalnością, wygląda na to, że musisz edytować plik "readmore.template.html" w kodzie źródłowym i dodać linię podziału : https://github.com/ismarslomic/angular-read-more/blob/master/src/readmore.template.html –

2

Jeśli wolisz mieć div że obcina się na podstawie wysokości pikseli zamiast liczby znaków, można spróbować. Pozwala to umieścić zagnieżdżony kod HTML w sekcji rozwijanej.

angular.module('app', []) 
 
.controller('TestController', function($scope) { 
 
    $scope.loremIpsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; 
 
}) 
 
.directive('showMore', function() { 
 
    return { 
 
     restrict: 'A', 
 
     transclude: true, 
 
     template: [ 
 
      '<div class="show-more-container"><ng-transclude></ng-transclude></div>', 
 
      '<a href="#" class="show-more-expand">More</a>', 
 
      '<a href="#" class="show-more-collapse">Less</a>', 
 
     ].join(''), 
 
     link: function(scope, element, attrs, controller) { 
 
      var maxHeight = 45; 
 
      var initialized = null; 
 
      var containerDom = element.children()[0]; 
 
      var $showMore = angular.element(element.children()[1]); 
 
      var $showLess = angular.element(element.children()[2]); 
 

 
      scope.$watch(function() { 
 
       // Watch for any change in the innerHTML. The container may start off empty or small, 
 
       // and then grow as data is added. 
 
       return containerDom.innerHTML; 
 
      }, function() { 
 
       if (null !== initialized) { 
 
        // This collapse has already been initialized. 
 
        return; 
 
       } 
 

 
       if (containerDom.clientHeight <= maxHeight) { 
 
        // Don't initialize collapse unless the content container is too tall. 
 
        return; 
 
       } 
 

 
       $showMore.on('click', function() { 
 
        element.removeClass('show-more-collapsed'); 
 
        element.addClass('show-more-expanded'); 
 
        containerDom.style.height = null; 
 
       }); 
 

 
       $showLess.on('click', function() { 
 
        element.removeClass('show-more-expanded'); 
 
        element.addClass('show-more-collapsed'); 
 
        containerDom.style.height = maxHeight + 'px'; 
 
       }); 
 

 
       initialized = true; 
 
       $showLess.triggerHandler('click'); 
 
      }); 
 
     }, 
 
    }; 
 
});
.show-more-container { 
 
    overflow: hidden; 
 
} 
 

 
.show-more-collapse, .show-more-expand { 
 
    text-align: center; 
 
    display: none; 
 
} 
 

 
.show-more-expanded > .show-more-collapse { 
 
    display: inherit; 
 
} 
 

 
.show-more-collapsed > .show-more-expand { 
 
    display: inherit; 
 
}
<script src="https://code.angularjs.org/1.5.8/angular.js"></script> 
 
<div ng-app="app" ng-controller="TestController"> 
 
    <div show-more> 
 
    All sorts of <strong>stuff</strong> can go in here. 
 
    {{ loremIpsum }} 
 
    <div>Even more divs</div>. 
 
    </div> 
 
    
 
    <div show-more> 
 
    This <strong>won't</strong> truncate. 
 
    </div> 
 
</div>

+0

Jak dodać kod kątowy do jonowego projektu 2? Próbowałem to zrobić z linii poleceń: ionic g directive showMore, ale kod, który tworzy, ma zupełnie inną składnię niż ten przykład. – user3561494

Powiązane problemy