Angular组件的全局scss变量,不是每次都导入它们

问题描述 投票:3回答:3

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

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

我知道,有很多类似的问题,但似乎它们都已过时,并且与最新版本的Angular无关。

我在CLI中使用Angular 7.3。

angular import sass global-variables angular-cli
3个回答
3
投票

您只需要添加更多配置,因此在声明全局变量的地方,您需要将其包装在:root{}中。所以在src/styles/settings/_variables.scss

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

然后,当您在SCSS中使用它们时,您将需要像这样访问它们。

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

要添加有关注释的内容,此方法可以使用mixins@mediakeyframes,并不仅限于颜色/字体。那就是一个例子。

根据我的理解,您需要一个全局文件src/assets/style/global,然后将每个scss文件导入到您定义它们的位置。

@import 'filename';

如果你不希望全局变量在组件中使用,那么当你使用全局变量时。查看ViewEncapsulation,因为这可以用来忽略它们。

这就是我当前的项目如何处理全局变量,它似乎运作良好。这将消除在您使用的每个scss文件中导入变量的需要。如果您有任何问题,请注意,BR。


1
投票

是否有任何方法可以为所有组件提供scss变量的全局文件?

如果不在每个组件中每次都导入全局文件,那么您希望这些sass变量可用,这是不可能的。

它在SASS中的工作方式,如果使用partials来更好地组织代码,您可以应用@import指令进行引用。所以如果在shared/_variables.scss中有一些sass变量:

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

并且这些变量需要在另一个样式表中使用,带有它们的样式表必须先导入到它中:

// Shared
@import "shared/variables";

.content {
  background: $lightslategray;
}

在Angular中,它以类似的方式工作(相关引用外部样式表)。因此,如果你需要一些特定的sass variables, mixins or functions使用的component.scss,没有其他干净的方法,但是使用component.scss指令在@import中引用它们。为了简化任务,您可以创建一个文件src/_variables.scss并在component.scss中使用这样的语法:

@import “~variables.scss”;

0
投票

在角8工作对我来说。

在_variable.scss文件中,您必须添加:

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

之后进入你的angular.json并在“样式”中添加:

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

-3
投票

TL; DR

不,在Angular中没有更好的方法,也没有更方便的方法来解决您的问题。

更详细的答案

如果我理解正确,你就会搞乱所有这些依赖注入,例如@import一个特定的SCSS保存你的变量。所以,你的问题是:

这是一个错误还是一个功能?

而且,我不得不说,这是一个功能。这使得您的组件更加灵活,并且您必须关心这些依赖关系,但从长远来看,您的代码将更易于维护并且更加结构化。依赖是现代JavaScript编程的核心功能。因此,如果您愿意,您可以坚持使用更老式的编程风格,将应用程序所需的一切都放在一个文件中。这是一种更为复杂的问题。

如果您查看“反应世界”的例子,您会发现更有必要构建您的注射。您不仅要导入整个文件并将所有变量,方法,类等提供给目标组件,而是选择要在目标组件中使用的每个单个变量。这增加了规划和构建整个应用程序的工作量,但请记住长期运行。编程良好的可维护软件与马拉松比sprint有更多共同之处。

我想和你分享这个Wikipedia article about „Dependency Injection“。也许你会在那里找到你的答案。

动机

为了防止你带着不好的感觉离开你,这是H. L. Mencken的一句好话:

“对于每一个复杂的问题,都有一个明确,简单和错误的答案。”

© www.soinside.com 2019 - 2024. All rights reserved.