gpt4 book ai didi

javascript - 在 Angular 7 中设置 sass 变量值

转载 作者:数据小太阳 更新时间:2023-10-29 03:49:01 26 4
gpt4 key购买 nike

过去几周我一直在使用 Angular,现在我需要动态设置公共(public)站点的样式。站点管理员在数据库中设置了各种颜色代码以及来自管理员的 Logo 图像。这些将在公共(public)站点打开时反射(reflect)出来。

因为我来自 asp.net 背景,以前我会做的是加载母版页,从数据库中获取值并将它们写入 .less 文件,然后让 java-script 库处理它。那里很简单。

但就我目前的情况而言,我正在使用 sass,但我找不到将变量写入 .scss 文件的方法。

我刚从 here 学到一个新东西 APP_INITIALIZER , 但最终这篇文章没有展示如何在 .scss 文件中写入。

我实际上是用我的 asp.net 知识来思考这个问题,但可能我错了,或者还有另一种实现方式。

我想要一个简单的解决方案,我们在 asp.net 中所做的,我想以同样的方式实现。

  1. 第一次加载应用程序时,通过 api 从数据库中获取变量值。

  2. 在 SASS 变量文件中写入值。

  3. 之后 SASS 会处理这个问题,我们会得到预期的结果。

请给出一些建议或例子,开始。

谢谢。

最佳答案

正如其他答案所解释的那样,不可能在客户端设置 SASS 变量并进行处理,因为 SASS 在构建时以及应用程序运行时或在 APP_INITIALIZER 中被转换为纯 CSS 浏览器只能处理 CSS。

我看到两个选项来实现您想要的。

通常,您会有一些应用程序的基础 CSS,然后您需要根据管理设置加载额外的 CSS。从 css 的 Angular 需要考虑的是,附加 css 中的所有 css specificity 应该大于 base css,否则它不会覆盖 base。这需要基本的 css 知识,所以我不会详细介绍。

方法一

根据服务器请求生成额外的 CSS。当应用程序从服务器 URL 启动时加载它。当管理员更改任何设置时通过 js 重新加载它。

  1. 在地址 /additional.css 定义后端端点(或者它可能类似于 /api/theme/custom-css )这将从数据库中生成 css。例如你有 background=red在数据库中,那么端点应该返回
body {background-color: red;}
  1. 添加<link id="additionalCss" rel="stylesheet" type="text/css" href="additional.css" /><head>index.html .这足以让它发挥作用。
  2. 要重新加载,您可以使用不同的方法,但我相信这应该有效
document.getElementById('additionalCss').href = document.getElementById('additionalCss').href;

这将向服务器发出新的请求,服务器将执行 DB -> css 并返回更新后的 css,它将应用于浏览器。

如果你想要酷(或者需要支持大而复杂的主题),可以使用 scss。后端应该从数据库中生成 scss 变量定义,然后应该使用一些服务器端应用程序来编译 scss -> css,然后将编译后的 css 返回给客户端。但如果额外的 css 足够简单,这就太过分了。

此方法的一个重要考虑因素是浏览器缓存,因为 additional.css 后面的内容是动态的,但浏览器可能会缓存它,而不是调用后端并提供过时的版本。

方法二

如果您不想或不能弄乱后端。通过 json 中的一些 API 端点从数据库加载设置,然后在客户端生成 css 代码并应用它。

  1. 使用 HttpClient 获取设置 JSON 并从中生成字符串形式的 css。例如服务器返回
{
"background": "red"
}

然后将其转换为字符串

cssCode = 'body {background-color: red}';
  1. 使用
let additionalCssStyle = document.getElementById('additionalCss');
if (! additionalCssStyle) {
additionalCssStyle = document.createElement("style");
additionalCssStyle.id = 'additionalCss';
document.head.appendChild(additionalCssStyle);
}
additionalCssStyle.innerText = cssCode;
  1. 要重新加载 - 将更改保存到后端,然后重复 1. 和 2.

关于javascript - 在 Angular 7 中设置 sass 变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com