@tennisgentのソリューションは素晴らしいです。ただし、少し限定的だと思います。
Angularのモジュール性とカプセル化はルートを超えています。Webがコンポーネントベースの開発に移行する方法に基づいて、ディレクティブでこれを適用することも重要です。
すでにご存じのように、Angularでは、ページとコンポーネントにテンプレート(構造)とコントローラー(動作)を含めることができます。AngularCSSは、最後に欠けている要素であるスタイルシート(プレゼンテーション)の添付を可能にします。
完全なソリューションについては、AngularCSSの使用をお勧めします。
- AngularのngRoute、UIルーター、ディレクティブ、コントローラー、サービスをサポートします。
- 持つ必要はありません
ng-app
で<html>
、タグ。同じページで複数のアプリを実行している場合、これは重要です
- スタイルシートを挿入する場所をカスタマイズできます(ヘッド、ボディ、カスタムセレクターなど)。
- プリロード、永続化、キャッシュ無効化をサポート
- メディアクエリをサポートし、matchMedia APIを介してページの読み込みを最適化します
https://github.com/door3/angular-css
ここではいくつかの例を示します。
ルート
$routeProvider
.when('/page1', {
templateUrl: 'page1/page1.html',
controller: 'page1Ctrl',
/* Now you can bind css to routes */
css: 'page1/page1.css'
})
.when('/page2', {
templateUrl: 'page2/page2.html',
controller: 'page2Ctrl',
/* You can also enable features like bust cache, persist and preload */
css: {
href: 'page2/page2.css',
bustCache: true
}
})
.when('/page3', {
templateUrl: 'page3/page3.html',
controller: 'page3Ctrl',
/* This is how you can include multiple stylesheets */
css: ['page3/page3.css','page3/page3-2.css']
})
.when('/page4', {
templateUrl: 'page4/page4.html',
controller: 'page4Ctrl',
css: [
{
href: 'page4/page4.css',
persist: true
}, {
href: 'page4/page4.mobile.css',
/* Media Query support via window.matchMedia API
* This will only add the stylesheet if the breakpoint matches */
media: 'screen and (max-width : 768px)'
}, {
href: 'page4/page4.print.css',
media: 'print'
}
]
});
ディレクティブ
myApp.directive('myDirective', function () {
return {
restrict: 'E',
templateUrl: 'my-directive/my-directive.html',
css: 'my-directive/my-directive.css'
}
});
さらに、$css
エッジケースにサービスを使用できます。
myApp.controller('pageCtrl', function ($scope, $css) {
// Binds stylesheet(s) to scope create/destroy events (recommended over add/remove)
$css.bind({
href: 'my-page/my-page.css'
}, $scope);
// Simply add stylesheet(s)
$css.add('my-page/my-page.css');
// Simply remove stylesheet(s)
$css.remove(['my-page/my-page.css','my-page/my-page2.css']);
// Remove all stylesheets
$css.removeAll();
});
AngularCSSの詳細については、こちらをご覧ください。
http://door3.com/insights/introducing-angularcss-css-demand-angularjs
<link>
はこの形式でcss タグを使用しました。最新のChrome、ローカルマシン上のサーバー(および「最初の読み込み」条件をシミュレートするために「キャッシュを無効にする」)を使用しました。<style>
サーバーのhtmlパーシャルにタグを事前に挿入すると、この問題を回避できると思います。