在 index.html 中导入 css 和在 Angular 5 中导入 styleUrls 的区别

Posted

技术标签:

【中文标题】在 index.html 中导入 css 和在 Angular 5 中导入 styleUrls 的区别【英文标题】:Difference between importing css in index.html and styleUrls in Angular 5 【发布时间】:2018-09-24 09:40:52 【问题描述】:

我在登录页面组件和仪表板组件中使用了不同的 css,因此登录页面或仪表板无法根据 css 工作。当我从 index.html 中删除这两行时:

  <link href="./assets/css/bootstrap.min.css" rel="stylesheet" />
  <link href="./assets/css/paper-dashboard.css" rel="stylesheet"/>

我在 angular.cli 中设置:

"styles": [
        "styles.css",
        "../node_modules/bootstrap/dist/css/bootstrap.min.css",
        "assets/sass/paper-kit.scss",
        "assets/css/demo.css",
        "assets/css/nucleo-icons.css"
      ]

我的组件(登录页面)可以正常工作,但仪表板不能。但是,当我在 index.html 和 angular.cli 中添加提到的两行时,我设置了:

"styles": [
        "styles.css"
      ]

我的登录页面无法正常工作,但仪表板却可以。我以如下所示的方式设置styleUrls,但它们似乎无法正常工作。有谁知道我该如何解决我的问题?我需要让两个组件都能正常工作。在我看来,我需要为每个组件分别设置 css,因为我尝试过但没有结果,但我不确定这是否是个好主意?

@Component(
  selector: 'dashboard-cmp',
  moduleId: module.id,
  templateUrl: 'dashboard.component.html',
  styleUrls: [
    '../../assets/css/paper-dashboard.css',
    '../../assets/css/bootstrap.min.css'
  ]
)

更新

我注意到当 angular.cli 样式以这种方式显示时:

  "styles": [
    "styles.css",
    "assets/css/bootstrap.min.css",
    "assets/sass/paper-kit.scss",
    "assets/css/demo.css",
    "assets/css/nucleo-icons.css",
    "assets/css/paper-dashboard.css"
  ]

我的仪表板组件可以正常工作,但登陆页面却不能。当我将样式更改为:

  "styles": [
    "styles.css",
    "../node_modules/bootstrap/dist/css/bootstrap.min.css",
    "assets/sass/paper-kit.scss",
    "assets/css/demo.css",
    "assets/css/nucleo-icons.css",
    "assets/css/paper-dashboard.css"
  ]

我的登录页面组件工作正常,而仪表板却没有。所以我尝试这样的事情 - 在dashboard.component.ts 我设置 styleUrls: ['./dashboard.component.css'] 和在dashboard.component.css 我添加@import url('/../../assets/css/bootstrap.min.css');。不幸的是,登陆页面仍然正常工作,而仪表板却没有。任何想法为什么?

【问题讨论】:

为什么要将 bootstrap.min.css 添加到组件而不是 angular-cli.json 中的应用程序? 因为当我在登陆页面和主面板中使用不同的 css 时,登陆页面或主面板都不能根据 css 工作。所以我决定将这些 css 分别添加到登录页面组件和主面板中。你认为这不是一个好主意吗? ../../assets 会告诉浏览器在项目文件夹之外查看。也许试试 ../assets 也许 ./assets @rickz 但是有我的资产目录。我更新了我的问题,并更清楚地解释了我的问题。 @JohnSmith 我认为您的仪表板 css 路径不正确。 paper-dashboard.css 在哪个文件夹中。 【参考方案1】:

组件是封装的魔法,它就像你自己的房间而不是整个房子。当你只用你父母为你的房子决定的油漆(index.html)粉刷你的房间(组件)时,油漆在外面是不可见的。当你想像你父母告诉你的那样粉刷房子时去外面作为一个整体(index.html),或者如果您想要自定义房间,请仅在您的房间(组件)中绘制

【讨论】:

我在登陆页面和主面板中使用了不同的 CSS,因此登陆页面或主面板都不能根据 CSS 工作。所以我决定将这些 css 分别添加到登录页面组件和主面板中。这相当于以不同的方式单独喘气。但是,正如我所描述的那样,它不起作用。你知道我该如何解决这个问题吗?【参考方案2】:

在 Angular css 中有两个作用域,即全局作用域和组件作用域。在全局范围内定义的 CSS 通过应用方式应用到所有组件中。对于全局范围,请在 index.html 文件中包含 css 或在 .angular-cli.json 文件的 styles 部分中注册。

在 angular-cli.json 文件中

"styles": [
     "styles.css",
     "../node_modules/bootstrap/dist/css/bootstrap.min.css"
    ],

@Component 元数据中指定的样式仅适用于该组件的模板。

在组件中

styleUrls: [
    './paper-dashboard.css'
  ]

https://angular.io/guide/component-styles

【讨论】:

我更新了我的问题,并更清楚地解释了我的问题。有什么想法可以解决这个问题吗?

以上是关于在 index.html 中导入 css 和在 Angular 5 中导入 styleUrls 的区别的主要内容,如果未能解决你的问题,请参考以下文章

在反馈中导入第三方jQuery,CSS,Java Script到index.html是好的,而不是使用npm或yarn

无法加载模块脚本 - 在 index.html 中导入类

如何在 Ionic 3 中导入外部 JS 文件

使用 vuejs 时,没有在 html 文件中导入 firebase 脚本标签

无法在 .tsx 文件中导入 CSS 模块

为啥在 TypeScript 中导入 CSS 不起作用?