【问题标题】:Angular 2 Material Progress Bar not Showing up when using in template?在模板中使用时没有显示Angular 2 Material Progress Bar?
【发布时间】:2017-02-10 10:17:57
【问题描述】:

我正在尝试将 Angular 2 进度条合并到我的 Angular 应用程序中。

我使用 Webpack 作为打包工具。

我已经用这个 Angular 种子启动了这个项目,请找到种子的 git repo 链接

https://github.com/AngularClass/angular2-webpack-starter

我已经安装了所有依赖项,但进度条仍然没有显示。

组件文件

<div class="loading-overlay" *ngIf="loading">
  <!-- show something fancy here, here with Angular 2 Material's loading bar or circle -->
  Here
  <md-progress-bar mode="indeterminate"></md-progress-bar>
</div>

ngModule

import { MaterialModule } from '@angular/material';
@NgModule({
  bootstrap: [ AppComponent],
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    RouterModule,
    routing,
    MaterialModule.forRoot()
  ],

})

请帮忙

【问题讨论】:

  • 究竟是什么不工作?请详细说明正在发生的事情,以及应该发生的事情
  • 进度条没有出现,这就是标题所说的,它没有出现在浏览器中
  • 请在了解完整问题后投反对票,因为进度条现在正在工作,进度条没有出现
  • 您是否遇到任何错误?如果从导入定义中删除 [ ] 会发生什么?
  • 我没有在控制台中收到错误,只是我在控制台中收到警告找不到 HammerJS。某些 Angular Material 组件可能无法正常工作。但是我知道 md 进度条不需要 Hammer js。即使从 import def 中删除 [] 也没有错误

标签: angular webpack angular-material


【解决方案1】:

确保您的 index.html 中引用了以下 css 文件

在您的 webpack.config.js 中,在 app 部分下检查以下行是否存在

'@angular/material': 'npm:@angular/material/bundles/material.umd.js',

您也可以参考@angular/material 的cdn,如下所示

'@angular/material': 'https://unpkg.com/@angular/material/bundles/material.umd.js',

LIVE DEMO

【讨论】:

  • 这不起作用,请在 git github.com/angular/material2/pull/1827/files/… 中参考此 PR。它明确指出我们必须在 Systemjs 中而不是在 webpack 中进行此配置。我还提到了我正在使用的入门包。
  • @INFOSYS 在此路径 npm:@angular/material/material.umd.js 中,您缺少 bundles 文件夹
  • 如何将它添加到我正在使用的仓库中,我已经使用 npm 安装了材料。
  • 哪个仓库?首先在您的本地机器上尝试,看看它是否正常工作
  • 我在本地机器上工作,但用于启动项目。我使用了来自 git 的github.com/AngularClass/angular2-webpack-starter repo。问题中提到了。找不到你提到的路径。
【解决方案2】:

正如@Christopher Moore 指出的那样,尝试删除

周围的括号
[MaterialModule.forRoot()] 

在进口中。如果这不能解决您的问题,请提供更多信息。

【讨论】:

  • 已经这样做了,但无济于事,您还想让我补充什么,我已经提到了我正在使用的入门包。
【解决方案3】:

使用以下代码: 首先将其导入 app.module.ts

从“@angular/material”导入 {MatProgressBarModule};

@NgModule({ 进口:[ MatProgressBar 模块 ]

})

You must have to import angular api

【讨论】:

  • 请在您的答案中添加一些解释以便更好地理解
【解决方案4】:

我克隆了 webpack starter 存储库并获得了进度条,整个过程是:

  • 克隆存储库
  • npm install + npm install -save @angular/material
  • 添加材料代码,见下文
  • npm run build:prod
  • npm run server:prod

材料代码: 在 app.module.ts 中

import { MaterialModule } from '@angular/material';

在 app.module.ts @NgModule 导入部分添加:

MaterialModule.forRoot()

在其中一个组件模板中添加:

<md-progress-bar mode="indeterminate"></md-progress-bar>

在全局样式文件中,例如“src/styles/styles.scss”,添加如下所述的主题之一

@import '~@angular/material/core/theming/prebuilt/purple-green.css';

来自official docs

Angular Material 预打包了几个预构建的主题 css 文件。这些主题文件还包括核心的所有样式 (所有组件通用的样式),因此您只需包含一个 应用中 Angular Material 的单个 css 文件。

您可以将主题文件直接包含在您的应用程序中 @angular/material/core/theming/prebuilt

如果您使用的是 Angular CLI,这就像包含一行一样简单 在你的 styles.css 文件中:

@import '~@angular/material/core/theming/prebuilt/deeppurple-amber.css';

【讨论】:

  • 我实际上需要整个 Angular 材质包,因为我试图使用 md-progress-bar 但它只是不显示,即使控制台中没有错误。
  • 我尝试将它添加到 styles.scss 但它没有解决。这不是我猜的错误。
  • 我猜这个错误是因为缺少材料包而不是因为样式
  • 我克隆了存储库并让它工作。请参阅我采取的步骤的更新答案。根据您的 cmets,我认为问题不在于缺少材料包,因为您在 app.module.ts 中的导入语句如果是这样就不起作用。我的建议是检查加载覆盖类中的冲突样式。尝试将 md-progress-bar 移到外面,这样就不会应用其他类。
  • MaterialModule.forRoot() 为我抛出错误:C:/.../app.module.ts (36,20) 中的错误:“typeof MaterialModule”类型上不存在属性“forRoot” '。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 2023-01-05
  • 1970-01-01
相关资源
最近更新 更多