【发布时间】:2020-09-21 13:34:50
【问题描述】:
我已将 Angular Material 安装到我的库中,并创建了一个共享资源模块,用于导入和导出所有材质组件。现在我有一个包含模块和组件的文件夹。模块声明/导出包含组件,导入数组导入共享材质模块。
由于某种原因,该组件不会在故事书中创建故事,也不会通过任何单元测试,因为它找不到从共享资源导入的 MatRadioModule。
这是我得到的错误:
模板解析错误: 'mat-radio-button' 不是已知元素: 1. 如果“mat-radio-button”是一个 Angular 组件,则验证它是否是该模块的一部分。 2. 如果“mat-radio-button”是一个 Web 组件,则将“CUSTOM_ELEMENTS_SCHEMA”添加到该组件的“@NgModule.schemas”以禁止显示此消息。
这是材质模块:
import { NgModule } from '@angular/core';
// Angular Material Components
import {MatCheckboxModule} from '@angular/material/checkbox';
import {MatButtonModule} from '@angular/material/button';
import {MatInputModule} from '@angular/material/input';
import {MatAutocompleteModule} from '@angular/material/autocomplete';
import {MatDatepickerModule} from '@angular/material/datepicker';
import {MatFormFieldModule} from '@angular/material/form-field';
import {MatRadioModule} from '@angular/material/radio';
import {MatSelectModule} from '@angular/material/select';
import {MatSliderModule} from '@angular/material/slider';
import {MatSlideToggleModule} from '@angular/material/slide-toggle';
import {MatMenuModule} from '@angular/material/menu';
import {MatSidenavModule} from '@angular/material/sidenav';
import {MatToolbarModule} from '@angular/material/toolbar';
import {MatListModule} from '@angular/material/list';
import {MatGridListModule} from '@angular/material/grid-list';
import {MatCardModule} from '@angular/material/card';
import {MatStepperModule} from '@angular/material/stepper';
import {MatTabsModule} from '@angular/material/tabs';
import {MatExpansionModule} from '@angular/material/expansion';
import {MatButtonToggleModule} from '@angular/material/button-toggle';
import {MatChipsModule} from '@angular/material/chips';
import {MatIconModule} from '@angular/material/icon';
import {MatProgressSpinnerModule} from '@angular/material/progress-spinner';
import {MatProgressBarModule} from '@angular/material/progress-bar';
import {MatDialogModule} from '@angular/material/dialog';
import {MatTooltipModule} from '@angular/material/tooltip';
import {MatSnackBarModule} from '@angular/material/snack-bar';
import {MatTableModule} from '@angular/material/table';
import {MatSortModule} from '@angular/material/sort';
import {MatPaginatorModule} from '@angular/material/paginator';
@NgModule({
imports: [
MatCheckboxModule,
MatCheckboxModule,
MatButtonModule,
MatInputModule,
MatAutocompleteModule,
MatDatepickerModule,
MatFormFieldModule,
MatRadioModule,
MatSelectModule,
MatSliderModule,
MatSlideToggleModule,
MatMenuModule,
MatSidenavModule,
MatToolbarModule,
MatListModule,
MatGridListModule,
MatCardModule,
MatStepperModule,
MatTabsModule,
MatExpansionModule,
MatButtonToggleModule,
MatChipsModule,
MatIconModule,
MatProgressSpinnerModule,
MatProgressBarModule,
MatDialogModule,
MatTooltipModule,
MatSnackBarModule,
MatTableModule,
MatSortModule,
MatPaginatorModule
],
exports: [
MatCheckboxModule,
MatCheckboxModule,
MatButtonModule,
MatInputModule,
MatAutocompleteModule,
MatDatepickerModule,
MatFormFieldModule,
MatRadioModule,
MatSelectModule,
MatSliderModule,
MatSlideToggleModule,
MatMenuModule,
MatSidenavModule,
MatToolbarModule,
MatListModule,
MatGridListModule,
MatCardModule,
MatStepperModule,
MatTabsModule,
MatExpansionModule,
MatButtonToggleModule,
MatChipsModule,
MatIconModule,
MatProgressSpinnerModule,
MatProgressBarModule,
MatDialogModule,
MatTooltipModule,
MatSnackBarModule,
MatTableModule,
MatSortModule,
MatPaginatorModule
]
})
export class MaterialModule { }
这里是组件模块:
import { NgModule } from '@angular/core';
import { ButtonComponent } from './button.component';
import { FormsModule } from '@angular/forms';
import { ReactiveFormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { MaterialModule } from '../material.module';
@NgModule({
declarations: [ButtonComponent],
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
MaterialModule
],
exports: [ButtonComponent]
})
export class ButtonModule { }
这是带有 html 的组件:
import {Component} from '@angular/core';
/**
* @title Radios with ngModel
*/
@Component({
selector: 'nds-button',
templateUrl: 'button.component.html',
styleUrls: ['button.component.css'],
})
export class ButtonComponent {
}
<mat-radio-group aria-label="Select an option">
<mat-radio-button value="1">Option 1</mat-radio-button>
<mat-radio-button value="2">Option 2</mat-radio-button>
</mat-radio-group>
现在我只是想知道为什么 mat-radio-button 不是已知元素?
我还应该补充一点,构建工作正常,但是在使用 Storybook 和运行我的 Jest 单元测试时会失败。
【问题讨论】:
-
这能回答你的问题吗? Add Angular Material to a custom library
-
不,不幸的是,这些东西都不适合我。我没有使用应用程序,只想要一个使用 Storybook 进行可视化的库。我尝试将 "@angular/material": "~9.2.1" 和 "@angular/cdk": "~9.2.1" 添加到 peerDependencies 和 Dependencies,但都不起作用。
标签: angular angular-material angular-library