Angular4
とsass
を使用して最初のプロジェクトを開始し、sass
を適切な方法で使用する方法を見つけようとしています。 angular-cli
を使用していますが、scss
構文を使用するようにデフォルトのスタイルを既に設定しています。コンパイルなどもすでに定義しています。
ただし、コンポーネントにstyleUrlsオプションがあり、場合によってはそのコンポーネントでのみ使用されるスタイルを定義することがわかりました。
問題は、そのscss
にcomponent
ファイルを設定すると、それが生成されない.css
ファイルがメイン.css
ファイルに含まれず、ルートプロジェクト。
だから基本的に私はこのようなプロジェクト構造を持っています:
app
app.module.ts
app.routing.ts
home
home.component.ts
home.html
_home.scss
client
client.component.ts
client.html
_client.scss
scss
_imports.scss
colors
_colors.scss
ui
_button.scss
_table.scss
//.. more folder and files
styles.scss
index.html
そして、styles.scss
ファイル内のメインcss
スタイルを設定できるようにしたいのですが、これは後でビルドプロセスでindex.html
ファイルに挿入されます。しかし、私が持っているコンポーネントごとに単一のcss
ファイルを生成することもできます。 home
およびclient
を使用し、それらのcss
スタイルのみを独自のcomponent
内で使用します。
それを行うことは可能ですか?私はそれをやろうとしましたが、これに関する他のリソースは見つかりませんでした!
探しているのは import directive :
@import "styles.scss";
@import "css/styles.scss";
@import url("http://example.com/css/styles.scss");
これにより、CSSが他のCSSファイルからメインCSSファイルにインポートされ、各ファイルの内容が、挿入を選択した順序に基づいてメインファイルに追加されます。
しない.scss
ファイル拡張子が必要であることに注意してください。SASSが自動的に処理するため、@import "file"
を使用して簡単にインポートできます。また、すべてのファイルを単一のインポートで結合できるため、独立したインポートで各ファイルを指定する必要もありません。
@import "styles.scss", "css/styles.scss", url("http://example.com/css/styles.scss");
セレクター内で@import
を指定して、ネストされたインポートを行うこともできます。
.global-nav {
@import "nav-bkgd";
}
お役に立てれば! :)
Ng-cliを使用したAngular 4.4+では、.angular-cli.json
{
...
"apps": [
...
"styles": [
"styles.scss"
],
...
]
...
"defaults": {
"styleExt": "scss",
"component": {}
}
}
各コンポーネントで、必要に応じて、.css
から.scss
@Component({
selector: 'app-your-component',
styleUrls: ['./your-component.component.scss']
})
プロジェクトを作成するときにscssを指定できます。
ng new project-name --style scss
私は同じ問題を抱えていて、leftnavコンポーネントがあり、そのscssがコンパイルされていないようで、上記のすべてを試しましたが機能しませんでした.ng newを使用して新しいアプリを作成しようとしました....私の考えを変えることで:D
相対的な.scssファイル内でsame component selector
を使用することはできないようですが、代わりに適切なclassNameでラッピングdivを使用し、その.classNameを.scssファイルコンテンツのルートラッピングとして使用する必要があります。
デモさせてください、これは私のアプリです:
app/component/leftnav
|leftnav.scss
|leftnav.html ==> simply `left nav works!`
|leftnav.ts ==> selector leftnav
app/
|app.html
|app.scss
そして、古いleftnav.scss内
leftnav{
background:red;
}
およびapp.html内
<leftnav></leftnav>
そしてどのように私はそれを修正しました!クラス名.leftnav
内にleftnav.html
を含むラッピングdivを追加して、コンポーネントセレクターの代わりにleftnav.scssのルートラッピングとして使用することで述べたように
だから私の新しい
.leftnav{
background:red;
}
そしてそれは動作します!
既に作業中のプロジェクトがある場合ng new my-sassy-app --style=scss
は役に立たないので、ng set defaults.styleExt scss
これが変更angular.cli.json
ファイルとして
"defaults": {
"styleExt": "scss",
"component": {
}
}
すでに存在するcss
ファイルをscss
拡張子に変更すると、scss
が機能していることがわかります。コンポーネント定義のcss
拡張子をscss
に変更することを忘れないでください ソース