Angular Material Elements 不会对更改做出反应

Posted

技术标签:

【中文标题】Angular Material Elements 不会对更改做出反应【英文标题】:Angular Material Elements do not react to changes 【发布时间】:2020-03-12 12:52:40 【问题描述】:

无论我在 Angular 8 项目中添加什么 Angular 材质元素(mat-tab、mat-button-toggle、mat-select、mat-input...),它们都不会更新。例如,在 mat-tab 中,会绘制波纹效果,但选项卡不会更改。 mat-button-toggle 显示了类似的行为。 mat-select 中的选项不显示,mat-input 中的浮动标签不浮动。 我的代码基本上来自 Angular Material 页面:

BrowserModule 和 BrowserAnimationsModule 被导入到 AppModule 中。

html

<mat-tab-group>
  <mat-tab label="First"> Content 1 </mat-tab>
  <mat-tab label="Second"> Content 2 </mat-tab>
  <mat-tab label="Third"> Content 3 </mat-tab>
</mat-tab-group>

模块:

import  NgModule  from '@angular/core';
import  MatTabsModule  from '@angular/material';
import  CommonModule  from '@angular/common';
import  IhTabComponent  from './tab.component';

@NgModule(
  imports: [
    CommonModule,
    MatTabsModule,
  ],
  declarations: [IhTabComponent],
  exports: [IhTabComponent],
  entryComponents: [IhTabComponent],
)
export class TabModule 

在我的其他 Angular 7 项目中,所有 Angular Material 元素都可以正常工作。

【问题讨论】:

你是否导入了所有正确的模块,我在那里只看到MatTabsModule 这里我只以mat-tab为例 您是否导入了 BrowsersAnimationModule?那个是必要的 是的,是在app.module(根模块)中导入的 【参考方案1】:

如果有人对解决方案感兴趣。我的问题是由 main.ts 文件中的ngZone: 'noop' 引起的。它禁用更改检测。

所以改变这个

platformBrowserDynamic()
.bootstrapModule(AppModule, 
 ngZone: 'noop'
)
.catch(err => console.error(err));

到这里

platformBrowserDynamic()
  .bootstrapModule(AppModule)
  .catch((err) => console.error(err));

用 Angular Material Elements 解决了我的问题。

【讨论】:

以上是关于Angular Material Elements 不会对更改做出反应的主要内容,如果未能解决你的问题,请参考以下文章

错误找不到模块'@angular/material

Angular 9 Elements:如何创建一个独立的 WebComponent(包含所有依赖项)?

AngularCLI 和 Angular Material(原理图)错误:无法解析集合“@angular/material”

测试 Angular 2 应用程序中的“CUSTOM_ELEMENTS_SCHEMA”错误

Angular Karma 使用 CUSTOM_ELEMENTS_SCHEMA 测试超时测试 AppComponent

无法导入“@angular/material”模块