【发布时间】:2018-09-28 20:58:25
【问题描述】:
我必须找到一种在我的 Angular5 组件的 HTML 中访问 SCSS 变量(及其值)的方法,我希望有人可以帮助我。
在我的 variables.scss 中有一些变量,例如:
...
$primary-1: #cccccc;
$primary-2: #666666;
$primary-3: #000000;
...
假设我的调色板由这些颜色组成。
我还创建了一些 Angular 组件,用于重用表格、图表等。
这些组件使用 ng2-charts/Chart.js。其中之一是 LineChartComponent,我将使用它来澄清我的问题。
...
<app-line-chart
height="500"
[hexColors]="['#ccccccc', '#666666','#000000']"
[datasetLabels]="..."
[datasets]="..."
[axisLabels]="..."></app-line-chart>
...
如您所见,我可以设置一些 hexColors。这些将被转换为 LineChartComponent 中的 RGBA 颜色。
但是现在......假设我的调色板正在改变。
然后,我必须在 variables.scss 中更改我的颜色,而且还要在这些颜色通过不同组件的所有地方更改颜色。
到目前为止,我还没有找到访问组件中变量的方法。我考虑过创建一个全局打字稿文件,其中还定义了这些颜色,所以我只需要编辑两个地方,我会得到这样的结果:
variables.scss
...
$primary-1: #cccccc;
$primary-2: #666666;
$primary-3: #000000;
...
color-variables.ts
export const COLORS = Object.freeze({
primary1: '#cccccc',
primary2: '#666666',
primary3: '#000000'
});
然后在我需要颜色的组件中设置全局变量。
example.component.ts
import {COLORS} from '../globals/variables';
...
@Component({...})
export class SomeComponent {
...
colors = COLORS;
...
}
然后将我的组件的 hexColors 设置为:
...
<app-line-chart
height="500"
[hexColors]="[colors.primary1, colors.primary2, colors.primary3]"
[datasetLabels]="..."
[datasets]="..."
[axisLabels]="..."></app-line-chart>
...
但是当我的调色板发生变化时,我必须再次修改两个地方。
这对我来说听起来不合逻辑,我相信应该有更好的方法来做到这一点,所以当我想替换颜色时,我只需要编辑一个地方。
最好通过编辑 SCSS,因为样式表(在我看来)负责样式和颜色。有没有人可以分享他/她的想法?
编辑:amit77309 提到这可能与access SASS values ($colors from variables.scss) in Typescript (Angular2 ionic2)
重复,但该解决方案似乎不起作用。
我没有使用离子,但正在寻找可能不是问题的解决方案。自定义属性未列在 bodyStyles 的属性列表中,因此无法访问。
【问题讨论】:
-
不,这不起作用。之前遇到过那个解决方案,然后在我看来似乎很复杂。现在我刚刚尝试过,但它不起作用。在调试代码时(在“bodyStyles”上放置手表),似乎没有添加自定义属性,因此读取值返回 null/empty。