发布于 2026-01-06 4 阅读
0

如何在 Angular 组件之间共享样式? 使用 CSS 类 使用共享组件样式文件 使用 SCSS @import 就这些啦!

如何在 Angular 组件之间共享样式

场景

使用 CSS 类

使用共享组件样式文件

使用 SCSS@import

就到这里啦!

今天我将向大家展示在 Angular 中组件间共享样式的不同方法,我想其中一些技巧也适用于其他框架。

场景

我目前正在开发(另一个)登录页面。这次,我想在用户注册前显示一条消息,并让他们选择登录还是注册。因此,我创建了三个组件。我希望这三个组件共享相同的样式。

使用 CSS 类

Angular 通常有一个样式文件,允许你在应用程序中全局应用类。你可以在其中创建一个类并将其应用到你的组件中,这可以通过两种方式实现:使用host属性和使用HostBinding装饰器。

  • 声明 CSS 类
  // In your style file, usually styles.scss
  .auth {
    // The styles you want to share
  }
Enter fullscreen mode Exit fullscreen mode
  • 使用主机 CSS 类
  @Component({
    // Stuff you know...
    host: {
      class: "auth"
    }
  })
  class WelcomeComponent {}
Enter fullscreen mode Exit fullscreen mode
  • 使用 CSS 类和 HostBinding
  @Component({
    // Stuff you know...
  })
  class WelcomeComponent {
    @HostBinding("class")
    public readonly classList = "auth";
  }
Enter fullscreen mode Exit fullscreen mode

两个版本都能达到同样的效果,但我更喜欢第一个版本用于静态值,第二个版本用于动态值。

使用共享组件样式文件

当您使用组件的样式文件时,您可以执行一些有趣的操作,例如 ` :hoststyle . ...::ng-deepstyleUrls

@Component({
  // Stuff you know...
  styleUrls: ["./welcome.component.scss", "../shared.scss"]
})
class WelcomeComponent {}
Enter fullscreen mode Exit fullscreen mode

请注意,URL 应相对于组件文件夹。

使用 SCSS@import

这是一个经典的例子,但我们可能会忘记 Angular 对 SCSS 文件并没有什么特殊处理,我们甚至可以使用 Webpack 的特性从src文件夹中导入文件。以下是具体操作方法。

  • 声明混合
  // src/styles/_auth.scss
  @mixin auth {
    :host {
      // The styles you want to share
    }
  }
Enter fullscreen mode Exit fullscreen mode
  • 使用 mixin
  // src/../welcome.component.scss
  @import "src/styles/auth";

  @include auth;
Enter fullscreen mode Exit fullscreen mode

就到这里啦!

现在你的应用里有三种共享样式的方法。你觉得你会用到其中哪一种呢?你还有其他方法可以在组件之间共享样式吗?请在评论区告诉我。当然,你也可以创建一个新的组件来专门应用样式,但我认为有时候 CSS 才是你真正需要的。

PS:顺便一提,我最终还是用了最新版本。

文章来源:https://dev.to/michaeljota/how-to-share-styles- Between-angular-components-nhm