问题描述
我是JHipster的新手,正在学习它的结构和自定义方式。
不是全局的,而是仅在一个组件视图中,我想知道在哪里修改生成的日期选择器,在这种情况下,只允许选择一个星期一的日期。
生成的组件html:
<div class="form-group">
<label class="form-control-label" jhiTranslate="deploymentApp.plan.startDate" for="field_startDate">Start Date</label>
<div class="d-flex">
<input id="field_startDate" type="datetime-local" class="form-control" name="startDate" formControlName="startDate" placeholder="YYYY-MM-DD HH:mm"/>
</div>
</div>
并且来自component.ts。唯一与日期相关的代码块:
ngOnInit(): void {
this.activatedRoute.data.subscribe(({ plan }) => {
if (!plan.id) {
const today = moment().startOf('day');
plan.startDate = today;
}
this.updateForm(plan);
this.areaService.query().subscribe((res: HttpResponse<IArea[]>) => (this.areas = res.body || []));
});
}
在Javascript / HTML中,这可以通过在script标签内使用java脚本来实现。
JHipster中自定义的日期选择器在哪里?
解决方法
您不需要添加新的依赖项,因为JHipster已经集成了ng-bootstrap。
要启用ng-bootstrap datepicker,只需更改以下内容即可:
<input id="field_startDate" type="datetime-local" class="form-control" name="startDate"
formControlName="startDate" placeholder="YYYY-MM-DD HH:mm"/>
对此:
<input id="field_startDate" class="form-control" name="startDate"
formControlName="startDate" placeholder="YYYY-MM-DD"
ngbDatepicker #d="ngbDatepicker" (click)="d.toggle()" [markDisabled]="markDisabled"/>
如果您注意到我添加了一个指向同名函数的“ markDisabled”属性,那么在您的组件TS文件中,您需要添加以下内容:
markDisabled(date: NgbDate): boolean {
const dateMoment = moment(date.year + '-' + date.month + '-' + date.day,'YYYY-MM-DD');
return dateMoment.isoWeekday() !== 7;
}
由于moment.isoWeekday()
返回星期几的数字[1-7]
,因此应该禁用除星期一以外的所有日期。
还有许多其他方法可以做到这一点,例如您可以使用NgbCalendar.getWeekday()
代替矩。我只是倾向于在所有与日期相关的日期中使用“时刻”。
由于JHipster使用浏览器的日期选择器:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local
,不确定要实现的目标是什么 type
属性可以帮助您实现所需的目标。