【问题标题】:Can't use angular 'mat-form-field' inside custom angular component不能在自定义角度组件中使用角度“mat-form-field”
【发布时间】:2022-01-11 11:43:04
【问题描述】:

我正在尝试为我应该能够在任何地方导入的标签列表创建一个组件。

该组件名为tag-list-component.ts,并导入到我的共享模块中:

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';

import { MatNativeDateModule } from '@angular/material/core';

import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatButtonModule } from '@angular/material/button';
import { MatButtonToggleModule } from '@angular/material/button-toggle';
import { MatCardModule } from '@angular/material/card';
import { MatChipsModule } from '@angular/material/chips';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatDialogModule } from '@angular/material/dialog';
import { MatExpansionModule } from '@angular/material/expansion';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatGridListModule } from '@angular/material/grid-list';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatListModule } from '@angular/material/list';
import { MatMenuModule } from '@angular/material/menu';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatRadioModule } from '@angular/material/radio';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatSelectModule } from '@angular/material/select';
import { MatSidenavModule } from '@angular/material/sidenav';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatSortModule } from '@angular/material/sort';
import { MatTableModule } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatTooltipModule } from '@angular/material/tooltip';

import { FilesizePipe } from './pipes/filesize.pipe';
import { LocaleDatePipe } from './pipes/locale-date.pipe';
import { TruncatePipe } from './pipes/truncate.pipe';

import { DisabledControlDirective } from 'src/app/shared/disabled-control.directive';

import { QRCodeModule } from 'angularx-qrcode';
import { NgxFileDropModule } from 'ngx-file-drop';
import { ClipboardModule } from '@angular/cdk/clipboard';
import { TagListComponent } from './components/tag-list/tag-list.component';

@NgModule({
    declarations: [
        FilesizePipe,
        LocaleDatePipe,
        TruncatePipe,
        DisabledControlDirective,
        TagListComponent,
    ],
    exports: [
        CommonModule,
        RouterModule,
        FormsModule,
        ReactiveFormsModule,
        MatNativeDateModule,
        MatAutocompleteModule,
        MatButtonModule,
        MatButtonToggleModule,
        MatCardModule,
        MatCheckboxModule,
        MatChipsModule,
        MatDatepickerModule,
        MatDialogModule,
        MatExpansionModule,
        MatFormFieldModule,
        MatGridListModule,
        MatIconModule,
        MatInputModule,
        MatListModule,
        MatMenuModule,
        MatPaginatorModule,
        MatProgressSpinnerModule,
        MatRadioModule,
        MatSelectModule,
        MatSidenavModule,
        MatSlideToggleModule,
        MatSnackBarModule,
        MatSortModule,
        MatTableModule,
        MatTabsModule,
        MatToolbarModule,
        MatTooltipModule,
        FilesizePipe,
        LocaleDatePipe,
        TruncatePipe,
        QRCodeModule,
        NgxFileDropModule,
        ClipboardModule,
        DisabledControlDirective,
        TagListComponent
    ],
    providers: [
        MatDatepickerModule,
    ],
})
export class SharedModule { }

它本身在 SharedChildModule 中被导入(用于测试)

import { NgModule } from '@angular/core';

import { TranslateModule } from '@ngx-translate/core';

import { SharedModule } from './shared.module';

@NgModule({
    imports: [ TranslateModule.forChild() ],
    exports: [
        TranslateModule,
        SharedModule,
    ],
})
export class SharedChildModule { }

我正在尝试在名为 project-list.component.html 的文件中使用该组件:

...
<app-tag-list></app-tag-list>
...

这是projects.module.ts 的一部分,它使用SharedChildModule(因此通过扩展导入SharedChild,然后在技术上应该导入TagListComponent

import { NgModule } from '@angular/core';
...
import { SharedChildModule } from '../../shared/shared-child.module';
...
@NgModule({
    declarations: [
        ...
    ],
    imports: [SharedChildModule, StatsModule],
})
export class ProjectsModule {}

这是TagListComponent的当前内容:

<mat-form-field>
    <mat-label translate>project.list.searchByTags</mat-label>
    <input />
</mat-form-field>

但我遇到了这个错误:'mat-form-field' 不是已知元素。

【问题讨论】:

  • shared.module.ts 中有数组 imports 吗?
  • @Chaka15 不,我没有。添加它可以解决问题。但我不知道为什么应用程序没有它就可以工作,因为还有另一个使用 mat-spinner 的组件并且它从来没有出现任何错误......
  • 那个使用MatProgressSpinnerModule的组件是module本身吗?
  • 在app.module.ts的声明中,但没有作为模块导出

标签: javascript angular typescript components


【解决方案1】:

您需要在声明TagListComponent的模块中导入MatFormFieldModule(即-SharedModule

import {MatFormFieldModule} from '@angular/material/form-field';

@NgModule({
    declarations: [
        ...
        TagListComponent,
    ],
    imports: [
       ...
       MatFormFieldModule
    ],
    exports: [
        ...
        TagListComponent
    ],
    providers: [
        ...
    ],
})
export class SharedModule { }

【讨论】:

  • 是导入的,我只是没有放整个文件。
  • 您附加的 shared.module.ts 是否完整?然后它仍然缺少导入数组。
猜你喜欢
  • 2020-01-16
  • 2021-12-06
  • 2020-10-29
  • 2021-01-22
  • 2020-03-27
  • 2020-07-10
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多