角度分量的全局 scss 变量,而不需要每次都导入它们

我已经在 src/styles/settings/_variables.scss中定义了 SCSS 变量,我正在将它们导入到 src/styles.scss中,但是这些变量仍然不适用于每个组件。

有没有什么方法可以创建一个全局文件,其中包含我其他组件的所有 SCSS 变量?因为在每个组件 .scss文件中编写 @import是非常令人沮丧的,特别是如果我有许多嵌套的组件。

我知道,有很多类似的问题,但似乎他们都是过时的,并没有涉及到最近版本的 Angular。

我用角度7.3和 CLI。

88273 次浏览

Is there any ways to make global file with scss variables available for all components?

Without importing global file everytime in each component, you want those sass variables been available, it's not possible.

The way it works in SASS, if using partials to better organize code, you can apply @import directive for referencing. So if there're some sass variables in shared/_variables.scss:

$lightslategray: #778899;
$darkgray: #A9A9A9;

and these variables need to be used in another stylesheet, stylesheet with them must be @import-ed into it firstly:

// Shared
@import "shared/variables";


.content {
background: $lightslategray;
}

In Angular it works in a similar way (related referencing external stylesheet). So if you need some sass variables, mixins or functions to be used by a particular component.scss, there is no other clean way, but to reference them in that component.scss using @import directive. To ease the task, you can create a file src/_variables.scss and use syntax like this in your component.scss:

@import “~variables.scss”;

You just need to add a little more config, so where you are declaring your global variables, you need to wrap it up in :root{}. So in src/styles/settings/_variables.scss.

:root
{
--blue: #00b; // or any global you wish to share with components
}

Then when you use them in the SCSS you will need to access them like so.

.example-class {
background-color: var(--blue)
}

To add to this regarding comments, this method can use mixins, @media and keyframes and is not limited to just colours / font. That was an example.

From my understanding you need a global file src/assets/style/global and then to import each scss file into there where you are defining them like so.

@import 'filename';

If you dont want global variables to be used in within a component look when you have the globals working. Look into ViewEncapsulation, as this can be used to ignore them.

In angular 8 work for me.

In your _variable.scss file you have to add:

:root{--my-var:#fabada}

After that go in your angular.json and add this in "styles":

{"input":"yourPath/_variables.scss"}

step one : go to custom scss file (shared/css/_variable.scss) and write this part

:root{
--color-text: red;
--color-btn-success: green;
}

after go to style.scss (this is main file) and import this file :

@import './shared/css/Variables';

now you can use variables in all components with this Syntax:

.sample{
color : var(--color-text);
}

Easily possibe to access sass style(s) from a global file with two steps.

  1. Add folder path of the style files to includePaths array in angular.json file.
  2. Import style file by file-name in any component.

let say your files and folder structures is as follows: src > my-styles-folder > var.scss

angular.json

"architect": {
"build": {
...
"options": {
"stylePreprocessorOptions": {
"includePaths": [
"src/my-styles-folder" // add path only, do not include file name
]
},
"styles": [
...
]
}
...
}
}

some-component.scss

@import "var"; // var.scss


mat-toolbar {
height: $toolbar-height;
}