ブラウザがShadow DOMを実装している場合はViewEncapsulation.Native
を、 そうでない場合はデフォルトのViewEncapsulation.Emulated
を使うようにフォールバックを実装する方法。
Shadow DOM Check
まずアプリケーション全体で統一のViewEncapsulation
を使うためにコンフィグ用のdefault-view-encapsulation.ts
を用意します。 よくよく調べるとAngular2のNative
はShadow DOM v1ではないようだけど、 BrowserDomAdapter
経由で調べるのでAngular側がいつv1準拠になっても大丈夫にしてある。
import {ViewEncapsulation} from "angular2/core";
import {BrowserDomAdapter} from "angular2/platform/browser";
let domAdapter = new BrowserDomAdapter();
export var DEFAULT_VIEW_ENCAPSULATION = domAdapter.supportsNativeShadowDOM() ?
ViewEncapsulation.Native : ViewEncapsulation.Emulated;
ChromeとSafariでしか見てないけどChromeのほうが若干初期ロードが速い気がする。 SharedStyleを使わない分JSでの処理が少ないだろうことは予想できる。