主题/样式 Angular 2 可重用组件库

2024-04-14

一般问题

我想要设计可重用的 Angular 组件的样式以匹配特定客户端项目的样式。

我在一个单独的项目中维护可重用组件,并从中生成一个 npm 包。该包被发布到私有 NPM 存储库 (Sinopia),然后安装到多个客户端项目中。

当然,一般样式是特定于组件的,但例如颜色和字体应该与客户端项目相匹配。

如何最好地将客户端项目中定义的颜色和字体等样式应用到可重用组件?

当前实施情况

目前我正在使用https://github.com/jvandemo/generator-angular2-library https://github.com/jvandemo/generator-angular2-library搭建可重用组件库。 它生成一些 Gulp 任务,让我构建一个 dist 版本。 发布该 dist 并使用已发布的包效果很好,但构建的代码使我很难找出可行的主题策略。

Gulp 构建任务将在最终代码中内联 HTML 和 CSS 资源。

示例组件

@Component({
    selector: 'app-messages',
    templateUrl: './messages.component.html',
    styleUrls: ['./messages.component.scss'],
})
export class MessagesComponent {

    constructor(private messagesService: MessagesService) {

    }

}

在构建过程中被“扁平化”

var MessagesComponent = (function () {
    /**
     * @param {?} messagesService
     */
    function MessagesComponent(messagesService) {
        this.messagesService = messagesService;
    }
    ...
    return MessagesComponent;
}());

MessagesComponent.decorators = [
    { type: Component, args: [{
                selector: 'app-messages',
                template: "<div *ngFor=\"let message of messages\"> <div class=\"message {{message.type}}-message\"> {{message.message}} <i class=\"fa fa-remove\" (click)=\"removeMessage(message)\">x</i> </div> </div>",
                styles: [".message { line-height: 36px; padding: 4px 20px; margin: 2px; position: relative; } .message .fa-remove { position: absolute; right: 20px; cursor: pointer; } .info-message { background-color: #005CAB; color: white; } .error-message { background-color: red; color: white; } "],
            },] },
];

The MessagesComponent.decorators现在包含内联样式。

具体问题

  1. 正在使用https://github.com/jvandemo/generator-angular2-library https://github.com/jvandemo/generator-angular2-library生成器是创建组件库的好选择吗?或者还有更好的方法吗?

  2. 我如何“覆盖”我的颜色和字体样式 可重复使用的组件?

我希望能够在组件库中使用 scss 变量,这些变量可以在客户端项目中(重新)定义。就像是

可重复使用的组件messages.component.scss:

.info-message {
   background-color: $primary-color;
   color: white;
 }

客户项目/style/_style-vars.scss:

$primary-color: #005CAB;

关于如何解决这个问题有什么想法吗?

跟进

我更进一步:

我现在使用 CSS3 变量,这让我几乎成功了:

在可重用组件中,我定义 SCSS 变量如下:

$primary-color: var(--ang-ux-primary-color, #5FB0FD);

.ang-ux-primary {
  background-color: $primary-color;
}

在我的客户项目中,我定义了这样的样式(style.scss):

// styling reusable components
:root {
  --ang-ux-primary-color: #666666;
}

这可行,但似乎我无法在 CSS 变量的定义中使用 SCSS 变量:

$primary-color: #666666;

// styling reusable components
:root {
  --ang-ux-primary-color: $primary-color;
}

导致可重用组件中的 $primary-color 为空。 我针对这个问题开了一个单独的线程:在 CSS3 变量定义中使用 SCSS 变量不起作用? https://stackoverflow.com/questions/50534058/using-scss-variable-inside-css3-variable-definition-not-working


试试这个方法:

  1. 将 scss styles 文件夹添加到项目中
  2. 添加到构建任务 - 将样式文件夹复制到“dist”文件夹
  3. 将 npm 包安装到客户端项目 (npm i )
  4. 从node_modules导入样式,SASS/SCSS说应该以~开头;您应该 @import '~/dist/scss/somefile 来项目 scss 文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

主题/样式 Angular 2 可重用组件库 的相关文章

随机推荐

  • 如何结束谈话?

    我已经使用 Bot Framework 创建了一个机器人 并且正在使用conversationID用我的后端对话引擎维护状态 我在文档中找不到用于结束对话的信息 至关重要的是 在某些时候 用户能够发出对话 结束或退出 的信号 以便下次他们开
  • 如何跨域使用 SignalR

    我正在尝试将 SignalR 与跨域一起使用 但在调用启动函数时收到错误消息 错误信息是 Uncaught TypeError Cannot call method start of undefined 我正在使用代码 服务器端 assem
  • 已编译的Azure功能监控:“没有可用数据”

    我在 Azure 上使用几个编译的 C 函数 它们按预期工作 但是当我单击任一功能上的 监视 时 它只显示 无可用数据 我可以在 开发 选项卡的日志上看到该函数正在运行 但希望了解该函数的用法的概述 我有什么遗漏的吗 我也看到这些了我将一个
  • jQuery 上一个按钮在单击时返回到 Q。) 1 而不是一一向后退

    jQuery 上一个按钮无法按预期工作 基本上最好的解释方法是 如果我在回答问题 5 时单击上一个按钮 则它默认为问题 1 而不是问题 4 所以它默认为问题1 这是一个问题 该怎么办 jQuery 位于脚本标签的底部 if i Questi
  • 如何为 docker 容器的日志着色

    我有一个容器 有时在日志中写入对我来说很重要的关键字 我想在终端中以颜色突出显示该单词 但同样重要的是仍然实时查看所有内容日志 follow 我刚刚尝试过命令 docker logs f my app tail 100 grep color
  • 大于100,000的随机数

    我正在用 C C 编写 我想创建很多大于 100 000 的随机数 我该怎么做呢 和rand 你不会那样做rand 但使用较新的 C 附带的适当随机数生成器 请参见例如cppreference com http en cppreferenc
  • Eclipse android ADT安装问题

    我按照每个步骤使用 Eclipse IDE 安装 android ADT 插件 我在 Windows 7 计算机上安装了 Eclipse for Java 我遵循每一步 尽管做了所有的事情 我还是收到以下错误 没有人犯过这个错误 我很着急请
  • Cython:类似 CPP 字典的地图性能

    我一直在比较使用模仿 python 字典的 c 映射与在 cython 中使用普通 python 字典的性能 我在 sklearn 中编写了 fast dict 实现的 简化 变体 https github com scikit learn
  • 如何在linux中的hdfs超级组中添加用户? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在研究 hdfs 然后我发现某些内容没有为超级用户执行权限检查 如果我的 linux 用户是 sandy 并且我想将 sandy 添加
  • 如何让tinymce(浏览器内的“富编辑器”)保留缩进

    问题 我将 Drupal 与丰富的编辑器一起使用 而丰富的编辑器喜欢通过删除缩进和格式来破坏我的文本 这在桌面编辑器中是不可接受的 但人们似乎可以在浏览器内编辑器中容忍这种情况 问 如何关闭此功能 我已经四处搜索 但尚未找到告诉富编辑器保留
  • 如何将 Javascript 数组传递给 Spring 控制器类

    我创建了 JS 数组并尝试将数组传递给 Controller 类 但它显示了NullPointerException 我通过 FireBug 检查了 URL 其中值正在传递 但在控制器类中 如果我尝试检索它 则显示 NULL JavaScr
  • List 或 IList [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 谁能向我解释为什么我想在 C 中使用 IList 而不是 List 相关问题 为什么暴露被认为是不好的List
  • Ruby 最大整数

    我需要能够确定 Ruby 中的系统最大整数 有人知道怎么做吗 或者是否可能 FIXNUM MAX 2 0 size 8 2 1 FIXNUM MIN 2 0 size 8 2
  • 自动更新 .net 应用程序

    到目前为止 我已经在 net 中编写了 2 个相当大型的应用程序 它们都需要一个更新工具 以便在我推出新代码时自动更新应用程序 我发现 企业应用程序块更新程序 对于我的需求来说有点过于复杂 并且在发布时我发现 单击一次 令人沮丧 我发现的最
  • 错误:unpack_from 需要缓冲区

    我正在使用 struct 来格式化固定分隔的 txt 文件 这是前两行 Sat Jan 3 18 15 05 2009 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 4a5e1e4baab89f3a325
  • 如何将图像路径和名称上传到数据库 - Codeigniter

    我知道这个问题已经被问过好几次了 但是我发现的所有其他问题都与我想要的不同 我想将文件名和文件路径上传到名为 工厂图像 的表 这样做的最佳方法是什么 我的控制器功能 function do upload config upload path
  • 这是 IOC 的典型用例吗?

    我当前的应用程序允许用户通过一组管理屏幕定义自定义 Web 表单 它本质上是一个 EAV 类型的应用程序 因此 我无法对 HTML 或 ASP NET 标记进行硬编码来呈现给定页面 相反 UI 从服务层请求 Form 对象的实例 服务层又使
  • ASP.Net:混合身份验证 Azure AD/表单

    我有一个使用表单身份验证的旧版 Asp Net MVC Razor WebApp 现在 由于某些用户拥有 Azure AD 帐户 因此我添加了一个特殊的 AD 登录按钮以及常用代码以使其正常工作 app UseOpenIdConnectAu
  • 茉莉花量角器打字稿在其块中发生预期故障后继续执行

    我正在使用 Protractor jasmine 框架和打字稿 所以我在describe中有多个it块 所以在每个it块内有很多方法或期望条件我正在验证 因此 当前当其中一个期望失败时 整个块就会终止 所以即使在一步失败后我也想继续执行 下
  • 主题/样式 Angular 2 可重用组件库

    一般问题 我想要设计可重用的 Angular 组件的样式以匹配特定客户端项目的样式 我在一个单独的项目中维护可重用组件 并从中生成一个 npm 包 该包被发布到私有 NPM 存储库 Sinopia 然后安装到多个客户端项目中 当然 一般样式