2017-12-11 44 views
2

Erhalte ich das falsch oder sollten Stilknoten vom Kopf des Dokuments verschwinden, wenn eine Komponente zerstört wird? https://github.com/juleskremer/angular/commit/385ed90ac373c0347ea88fe38685405c01ba1a58eckig 5 Entfernen von Stil Knoten auf Komponente zerstören

Wenn ich die Kapselung auf "none" setze, bleibt der für diese Komponente hinzugefügte Stilknoten auch dann erhalten, wenn er zerstört wird?

Gibt es eine Möglichkeit, den Style-Knoten zu löschen, wenn die Komponente zerstört wird?

Antwort

2

Angular unterstützt das Entfernen von Stilknoten aus Dokument nicht. Aber ich schreibe einen Angular Provider mit dem Namen "StyleService" zum Erstellen/Entfernen eines Stilknotens aus dem Dokument.

Service: style.service.ts

import { Injectable, Inject, Optional } from '@angular/core'; 

import { STYLE_HOST } from 'app/common'; 

@Injectable() 
export class StyleService { 

    private stylesMap: Map<any, Node> = new Map(); 

    constructor(
    @Optional() @Inject(STYLE_HOST) private host: Node 
) { 
    if (host === null) { 
     this.host = document.head; 
    } 
    } 

    createStyleNode(content: string): Node { 
    const styleEl = document.createElement('style'); 
    styleEl.textContent = content; 
    return styleEl; 
    } 

    has(key: any): boolean { 
    return this.stylesMap.has(key); 
    } 

    addStyle(key: any, style: string): void { 
    const styleEl = this.createStyleNode(style); 
    this.stylesMap.set(key, styleEl); 
    this.host.appendChild(styleEl); 
    } 

    removeStyle(key: any): void { 
    const styleEl = this.stylesMap.get(key); 
    if (styleEl) { 
     this.stylesMap.delete(key); 
     this.host.removeChild(styleEl); 
    } 
    } 
} 

Komponente: login.component.ts

Sie brauchen eine CSS-Datei in denselben Ordner zu erstellen, und es erfordert.

export class LoginComponent implements OnDestroy { 

    constructor(
    private styleService: StyleService 
) { 
    styleService.addStyle('loginStyle', require('./style.css')); 
    } 

    ngOnDestroy(): void { 
    this.styleService.removeStyle('loginStyle'); 
    } 
} 
1

Hier ist meine Meinung dazu.

Stellen Sie sich vor, dass es 1000 Listenelemente gibt und klicken Sie auf klicken, Sie bewegen sich zur Detailkomponente für jedes Listenelement. Also, wenn Sie Stile bei der Zerstörung von Details Komponente entfernen, was passiert, wenn Sie es für andere Listenelemente erneut umleiten. Jedes Mal, wenn das Laden von CSS eine Belastung ist. Vielleicht wird es deshalb nicht entfernt.

Verwandte Themen