【问题标题】:Angular Universal CSS imports not workingAngular Universal CSS导入不起作用
【发布时间】:2017-05-19 18:30:55
【问题描述】:

我只是在测试 Angular Universal 如何处理第三方 JavaScript 和 CSS 库的导入。为了便于使用,我尝试使用 jQuery 和 Bootstrap。

我正在使用 Universal Starter repo https://github.com/angular/universal-starter 并通过 npm 安装了 jQuery 和 Bootstrap。

在我的app.component.ts 中,我像这样包含了 jQuery,它运行良好。

import { isBrowser, isNode } from 'angular2-universal'
var jQuery: any = require('jquery');

...

@Component({
  changeDetection: ChangeDetectionStrategy.Default,
  encapsulation: ViewEncapsulation.Emulated,
  selector: 'app',
  templateUrl: './app.component.html'
})
export class AppComponent implements OnInit {
  title = 'ftw';

  ngOnInit(): void {
    if (isBrowser) {
      jQuery('#universal').css({'color': '#FF0000', 'font-size': '25px'})
    }
  }
}

虽然当我想导入一个 css 文件时它不能正常工作。我将它导入到我的app/client.ts 文件中,如下所示。

...
// Angular 2
import { enableProdMode } from '@angular/core';
import { platformUniversalDynamic } from 'angular2-universal/browser';
import { bootloader } from '@angularclass/bootloader';

import { load as loadWebFont } from 'webfontloader';

import 'bootstrap/dist/css/bootstrap.css';

// enable prod for faster renders
enableProdMode();
...

实际的 Bootstrap css 在我的 Webpack 包中,但我的 HTML 没有任何样式。有没有人遇到过类似的问题并且知道如何解决这个问题?

【问题讨论】:

    标签: css twitter-bootstrap angular angular-universal


    【解决方案1】:

    转到 Angular CLI 项目文件夹根目录下的 angular-cli.json 或 angular.json 文件,找到 scripts: [] 属性,并包含 jQuery 的路径,如下所示:

    "scripts": [ "../node_modules/jquery/dist/jquery.min.js",
    "../node_modules/bootstrap/dist/js/bootstrap.js"]
    

    现在,要使用 jQuery,你所要做的就是将它导入到任何你想使用 jQuery 的组件中。

    import * as $ from 'jquery';
    (or)
    declare var $: any;
    
    import { Component, OnInit  } from '@angular/core';
    import * as $ from 'jquery';
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html',
      styleUrls: ['./app.component.css']
    })
    export class AppComponent implements OnInit {
    
      ngOnInit()
      {
        $(document).ready(function(){
           // your code
        });
      }
    }
    

    【讨论】:

      【解决方案2】:

      为了使import 'bootstrap/dist/css/bootstrap.css'; 工作,您需要style loader,它没有安装在universal-starter repo 中。旁注:如果您按原样使用 bootstrap.css,并且要使用 Universal-starter,可以将 bootstrap.min.css 复制到 assets 文件夹并在 index.html 中为其添加链接标签。

      【讨论】:

      • 我的意图是包含来自 VMWare vmware.github.io/clarity 的 Clarity,但我试图首先包含引导程序以进行尝试。我更喜欢通过 webpack 直接导入文件,以备将来更新包时使用。我现在正在尝试样式加载器,但还没有成功。 Webpack 编译但运行服务器崩溃。现在得到TypeError: cssText.replace is not a function 错误。我的代码是{ test: /\.css$/, loader: ExtractTextPlugin.extract({ fallbackLoader: 'style-loader', loader: 'css-loader' }) }
      • 据我所知,您需要两套加载器:css in componetscss with imports。我自己需要尝试一下。
      • 我正在尝试这个,如果我有任何进展,我会通知你
      • 我无法让它工作。 Here 是我更改的文件。在npm start 之后,外部css 文件已经在dist/client 下生成了,但它不会被提供。坦率地说,我太依赖 angular-cli,所有这些构建工作都是免费完成的。
      • 不幸的是,我自己也无法让它工作。我将阅读 webpack 的文档并尝试提出解决方案,因为我真的需要它。希望已经有一个通用的 cli 可用。
      猜你喜欢
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2018-10-31
      • 2018-09-15
      • 1970-01-01
      • 2017-12-29
      • 2018-10-13
      相关资源
      最近更新 更多