我使用 Angular Material 将日期选择器添加到我的应用中。由于某种原因,角度材料没有应用原始的角度材料样式。
它在我的应用中的显示方式:
应该如何显示:
我做了什么:
npm install --save @angular/material @angular/cdk
npm install --save @angular/animations
// Added this to the Angular Module whose components require the date picker
import {MatNativeDateModule, MatDatepickerModule} from "@angular/material";
//Added this in the root style.css file for the entire app
@import "~@angular/material/prebuilt-themes/indigo-pink.css";
我不确定我做错了什么。
更新
模块代码:
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {RouterModule} from "@angular/router";
import {ProposalListComponent} from './components/proposal-list.component';
import {ProposalDetailComponent} from './components/proposal-detail.component';
import {ProposalEditComponent} from './components/proposal-edit.component';
import {ReactiveFormsModule} from "@angular/forms";
import {ProposalEditResolverService} from "./services/proposal-edit-resolver.service";
import {SectorResolverService} from "../root/services/sector-resolver.service";
import {ProposalAddComponent} from './components/proposal-add.component';
import {AuthGuard} from "../authentication/guards/auth.guard";
import {MatNativeDateModule, MatDatepickerModule, MatFormFieldModule, MatInputModule} from "@angular/material";
import {FileDropModule} from "ngx-file-drop";
import {ProposalListResolverService} from "./services/proposal-list-resolver.service";
@NgModule({
imports: [
CommonModule,
RouterModule.forChild([
{
path: 'proposals',
component: ProposalListComponent,
canActivate: [AuthGuard],
resolve: {proposals: ProposalListResolverService}
},
{
path: 'proposals/:id',
component: ProposalEditComponent,
canActivate: [AuthGuard],
resolve: {proposal: ProposalEditResolverService, sector: SectorResolverService}
},
{
path: 'proposals/0/new',
component: ProposalAddComponent,
canActivate: [AuthGuard],
resolve: {sector: SectorResolverService}
}
]),
ReactiveFormsModule,
MatFormFieldModule,
MatInputModule,
MatDatepickerModule,
MatNativeDateModule,
FileDropModule
],
declarations: [ProposalListComponent, ProposalDetailComponent, ProposalEditComponent, ProposalAddComponent],
providers: [ProposalEditResolverService, ProposalListResolverService]
})
export class ProposalModule {
}
HTML:
此代码位于" ProposalEditComponent" 中,它是上述模块的一部分。
<input matInput [matDatepicker]="picker" placeholder="Choose a date">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
答案 0 :(得分:3)
浪费了两天后就可以了。
如果找不到任何解决方案,只需再次添加棱角材料。它不会影响您的代码,但会添加CSS。不要忘记重新启动角度服务器。
ng add @angular/material
答案 1 :(得分:2)
您是否尝试过包含MatInputModule和MatFormFieldModule?
我认为您仍然需要包含MatInputModule,因为您正在处理输入,因此Angular Material将初始化输入的样式。
//添加此
import {MatNativeDateModule, MatDatepickerModule,MatFormFieldModule,MatInputModule } from "@angular/material";
如果你还在使用MatFormFieldModule,那么你也可以使用表格字段。
和MatInputModule旨在在MatFormFieldModule中工作。 //查看此链接https://material.angular.io/components/form-field/overview
示例代码。
<mat-form-field>
<input matInput [matDatepicker]="picker" placeholder="Choose a date">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>
希望这会有所帮助...
答案 2 :(得分:1)
尝试将样式文件添加到angular.json,例如,您可以使用Deeppurple琥珀色预制主题:
"styles": [
"node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css"
]
此页面上的更多信息: https://material.angular.io/guide/getting-started#step-4-include-a-theme
答案 3 :(得分:1)
这是基于 Angular 11。就像大家说的那样,我确实确保将样式添加到 angular.json
(已经存在)和 app.module.ts
中的必要导入。尽管如此,我仍然被弄乱了风格。非常有趣的是,它确实选择了主题颜色,但没有选择控件样式。
我最终在每个组件文件中添加了另一个导入,其中使用了 mat* 组件并且运行良好。
import { MatButtonModule } from "@angular/material/button";
请记住,当您添加该导入时,您的 IDE(在我的示例中为 VS Code 和 Visual Studio 2019)会告诉您(通过将其变灰)它不需要并且可以删除。
答案 4 :(得分:0)
根据官方Documentation的Angular Material:
所有主题和主题都必须包含主题 您的应用程序的样式。
要开始使用预先构建的主题,请包括Angular之一 在您的应用程序中全局使用Material的预制主题。
您只需将以下内容添加到style.css
中即可使其正常工作:
@import "~@angular/material/prebuilt-themes/indigo-pink.css";
或者您可以在头标签中直接使用<link>
标签。
和平。
答案 5 :(得分:0)
您需要用input
包裹<mat-form-field>
元素,然后应用Material样式。
<input matInput .... />
本身是不够的。
您需要:
<mat-form-field>
<input matInput .... />
</mat-form-field>
答案 6 :(得分:0)
我知道这可能是一个新手答案,因为我是 Angular 的新手。但是我使用 VSCode 和一个托管 HTML 站点的扩展来在您修改代码时实时显示更改。当您尝试使用它在本地托管 Angular 的组件 html 文件时,它将无法与来自材料 angular 的 CSS 一起使用。
因此,一种可能的解决方案是:在项目文件夹中打开一个终端并运行:
ng serve
这让我很棘手。