2016-03-06 10 views
7

Moja aplikacja AngularJS 2 ma kilka plików stylu, które łączę z zadaniem gulp. Wszystko w porządku, ponieważ trafią do dużego pliku, który wysyłam do przeglądarki w trakcie produkcji. Moje pytanie dotyczy atrybutu Angular 2 @Component i jego styleUrls.Styl AngularJS 2: Co słychać w konkatenacji?

@Component({ 
    selector: 'hero', 
    templateUrl: 'hero/hero.template.html', 
    styleUrls: ['hero/hero.component.css'], 

    inputs: ['hero'] 
}) 

Dzięki cień DOM emulacji w trybie domyślnym (emulowane) style zdefiniowane w hero/hero.component.css są stosowane tylko do składnika, tak jak chcę. Moje pytanie brzmi, co dzieje się z konkatenacją? Nie mogę połączyć wszystkich plików CSS podanych w kodzie wielokrotnym styleUrls, ponieważ pokonamy cel enkapsulacji: style komponentu wyciekłyby do całego dokumentu. Nie chcę jednak wykonywać wywołań w produkcji dla każdego pliku CSS, którego potrzebuje dany komponent. Jak mogę połączyć te style (i ewentualnie je zminimalizować), aby klient uzyskał je wszystkie podczas jednego połączenia i nadal zachował enkapsulację?

+1

Cóż, używam maszynopisu i npm do pracy z kątem 2 i zauważyłem, że za kulisami wszystkie styleUrls są automatycznie pobierane jako pierwsze, tworzone w linii prostej, a następnie wysyłane do przeglądarek. Czy jest jakiś problem z tym podejściem? – mehulmpt

+1

masz na myśli dla każdego komponentu określającego 'styleUrls' istnieje żądanie pobierania każdego z plików, prawda? To działa, zastanawiałem się jednak, czy można go w jakiś sposób zredukować do pojedynczego połączenia (dla środowisk produkcyjnych). –

+1

Uważam, że style nie powinny być łączone, ale należy je łączyć z komponentami, np. za pośrednictwem gulp-inline-ng2-template. – estus

Odpowiedz

1

Pliki szablonów i css można łączyć z plikami js przy użyciu wtyczki systemowej js.

import { Component } from '@angular/core'; 

import html from './hero/hero.template.html!text'; 
import css from './hero/hero.component.css!text'; 

@Component({ 
    selector: 'hero', 
    template: html, 
    styles: [css], 
}) 
export class HeroComponent implements { 
}