2016-03-06 5 views
7

私のAngularJS 2アプリケーションには、gulpタスクで連結するいくつかのスタイルファイルがあります。それは大丈夫です。プロダクションでブラウザに送る大きなファイルに終わるからです。私の質問は、Angular 2 @ComponentとそのstyleUrls属性についてです。AngularJS 2 styleUrls:連結はどうですか?

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

    inputs: ['hero'] 
}) 

hero/hero.component.cssで定義されたスタイルは、私だけがしたいだけのようコンポーネントに適用されるデフォルトモード(エミュレート)でDOMエミュレーションをシャドウに感謝します。私の質問は、連結でどうなるでしょうか? styleUrlsで指定されたCSSファイルをすべてバンドルすることはできません。なぜなら、カプセル化の目的を破るからです。コンポーネントのスタイルがドキュメント全体に漏れることになります。しかし、コンポーネントが必要とするすべてのCSSファイルについて、本番環境での呼び出しを希望しません。これらのスタイルをどのように連結して(おそらくそれらを縮小して)、クライアントが1回の呼び出しですべてを取得し、カプセル化を保持できるようにするにはどうすればいいですか?

+1

、私は角2で動作するようにtypescriptですとNPMを使用して、私は舞台裏で、すべてのstyleUrlsが自動的に頭の中でインラインを作った後、ブラウザに送信され、最初にフェッチされていることを観察しました。このアプローチに問題はありますか? – mehulmpt

+1

あなたは 'styleUrls'を指定するすべてのコンポーネントに対して、それぞれのファイルを取得する要求があることを意味します。それはうまくいく、私はそれが何らかの形で(生産環境のために)単一の呼び出しに還元できるかどうか疑問に思った。 –

+1

私は、スタイルを連結してはならず、コンポーネントと一緒にバンドルするべきだと考えています。 gulp-inline-ng2-templateを介して – estus

答えて

1

システムjsプラグインを使用して、テンプレートファイルとCSSファイルを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 { 
} 
関連する問題