与字符串

时间:2019-05-13 15:17:27

标签: sass angular7

我在我的angular 7项目中使用了SASS(.scss)。它有多个主题。因此,我必须为每个主题动态更改全局样式。但是我的@if条件返回false。

styles.scss:

@import "app/themes/Atlantis/master-style.atlantis.scss";


:root{
  --theme: false
}

@if var(--theme) == 'atlantis'{
  //@include master-style-atlantis;
  html {
    background:red; // sample code to check if my @if worked
  }
}

我将--theme道具添加到有角度的app.component.ts中:

 _document = document.querySelector('html');

 ngOnInit(): void {
   this._document.style.setProperty('--theme', 'atlantis');
 }

将html属性设置为style="--theme:atlantis;",但背景颜色不变。但是如果我使用

@if var(--theme){
  //@include master-style-atlantis;
  html {
    background:red; // sample code to check if my @if worked
  }
}

有效。如果是,则为true / false。但是比较字符串总是返回false。请帮忙。

1 个答案:

答案 0 :(得分:0)

Sass是前置处理器。当您在angular的--theme: prop生命周期钩子上应用ngOnInit时,它没有对该属性更改的相关引用。因此,@if var(--theme) == 'atlantis'总是会返回false,因为Sass在设置之前就运行了很长时间。

第二个“有效”示例“有效”的原因是因为sass在运行时确实会在其中找到var(--theme)属性。

您可能会read up更多地采用更有效的策略来实现自己的目标。希望这会有所帮助,加油!