Angulaire 2 Lire Plus Directive

J'ai besoin de construire une readmore directive Angular2. Ce que cette directive n'est pour réduire et développer les longs blocs de texte avec "en savoir plus" et "fermeture" des liens. Non pas sur la base du nombre de caractères, mais sur la base de la hauteur max.

<div read-more [maxHeight]="250px" [innerHTML]="item.details">
</div>

Quelqu'un peut s'il vous plaît guide quel serait le moyen le plus fiable pour obtenir/définir la hauteur de l'élément pour ce cas précis.

Des directives sur la façon dont cette directive spécifique pourrait être mis en œuvre serait également très apprécié.

J'ai besoin de construire quelque chose comme ça https://github.com/jedfoster/Readmore.js

Solution:

Avec l'aide de Andzhik je suis en mesure de construire le ci-dessous composant qui répond à mes exigences.

import { Component, Input, ElementRef, AfterViewInit } from '@angular/core';

@Component({
    selector: 'read-more',
    template: `
        <div [innerHTML]="text" [class.collapsed]="isCollapsed" [style.height]="isCollapsed ? maxHeight+'px' : 'auto'">
        </div>
            <a *ngIf="isCollapsable" (click)="isCollapsed =! isCollapsed">Read {{isCollapsed? 'more':'less'}}</a>
    `,
    styles: [`
        div.collapsed {
            overflow: hidden;
        }
    `]
})
export class ReadMoreComponent implements AfterViewInit {

    //the text that need to be put in the container
    @Input() text: string;

    //maximum height of the container
    @Input() maxHeight: number = 100;

    //set these to false to get the height of the expended container 
    public isCollapsed: boolean = false;
    public isCollapsable: boolean = false;

    constructor(private elementRef: ElementRef) {
    }

    ngAfterViewInit() {
        let currentHeight = this.elementRef.nativeElement.getElementsByTagName('div')[0].offsetHeight;
       //collapsable only if the contents make container exceed the max height
        if (currentHeight > this.maxHeight) {
            this.isCollapsed = true;
            this.isCollapsable = true;
        }
    }
}

Utilisation:

<read-more [text]="details" [maxHeight]="250"></read-more>

Si il pourrait y avoir des améliorations, n'hésitez pas à suggérer.

Trouver currentHeight à l'intérieur de la setTimeout(_ => { ..... }) permettrait d'éliminer certains redimensionnement de la fenêtre problème lors de l'angulaire de l'exécution de changer de détections. voir stackoverflow.com/questions/38930183/...

OriginalL'auteur Naveed Ahmed | 2016-06-14