Подтвердить что ты не робот

Как использовать Angular 4 с SASS

Я начинаю свой первый проект с использованием 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

И я хотел бы иметь возможность установить основной стиль css в файле styles.scss, который будет вставлен в файл index.html позже, в процессе сборки. Но также можно сгенерировать один файл css для каждого компонента, который у меня есть, например, home и client, и использовать только те стили css в своем собственном component.

Возможно ли это сделать? Я пытался сделать это, и я не нашел другого ресурса об этом!

4b9b3361

Ответ 1

Что вы ищете, это директива import:

@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";
}

Надеюсь, это поможет!:)

Ответ 2

В Angular 4.4+ с ng-cli вам нужно изменить следующие настройки в .angular-cli.json

{
  ...
  "apps": [
    ...
    "styles": [
        "styles.scss"
      ],
      ...
  ]
  ...
  "defaults": {
    "styleExt": "scss",
    "component": {}
  }
}

и в каждом компоненте, если необходимо, измените .css на .scss

@Component({
    selector: 'app-your-component',
    styleUrls: ['./your-component.component.scss']
})

Ответ 3

Вы можете указать scss при создании проекта.

ng new project-name --style scss

Ответ 4

У меня была такая же проблема, у меня есть компонент leftnav, и его scss, казалось, никогда не компилировался, я пробовал все выше, но не работал, и я попытался создать новое приложение с помощью ng new.... но после этого я исправлено, изменив мои мысли: D

похоже, что мы не можем использовать same component selector внутри его относительного .scss файла но вместо этого мы должны использовать обертку 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>

и как я его исправил! как я сказал, добавив div с классом .leftnav внутри leftnav.html и используя его как корневую упаковку моего leftnav.scss вместо селектора компонентов

поэтому мой новый

.leftnav{
    background:red; 
}

и он работает!

Ответ 5

Если у вас уже проект wokring ng new my-sassy-app --style=scss не поможет, поэтому вам нужно использовать ng set defaults.styleExt scss , это изменяет angular.cli.json файл как

"defaults": {
  "styleExt": "scss",
  "component": {
 }
}

Теперь измените уже существующие файлы css на расширение scss, вы увидите, что теперь работает scss. Не забудьте изменить расширения css в ваших определениях компонентов на scss Источник