我希望我的下拉列表显示我的数据中的2017年和2018年。 2017和2018在我的json数据文件中重复很多次。但是我希望在选择时显示所有2017年数据,并在选择时显示所有2018年数据。当前,它显示所有数据,并且下拉列表中的数据已满。
这是下拉菜单的HTML代码:
<div class="row justify-content-center">
<div class="col-4s">
<p>Financial Year:</p>
</div>
<div class="col-4s">
<select>
<option *ngFor="let volumes of volumes">{{ volumes.month |
date: 'yyyy' }}</option>
</select>
</div>
</div>
Angular4代码: 导出类VehicleVolumeEditComponent实现OnInit {
volumes: Volumes[];
groupedVolumes : any;
constructor(private volumeService: VolumeService, private router: Router) {
this.volumeService.getVolumes().subscribe(volumes => {
this.volumes = volumes;
this.groupedVolumes = this.group(this.volumes);
this.dataOk = true;
}
}
json文件:
[
{
"id": 1,
"month": "2017-03-01"
}
{
"id": 2,
"month": "2017-04-01"
}
{
"id": 3,
"month": "2017-05-01"
}
{
"id": 4,
"month": "2017-06-01"
}
{
"id": 5,
"month": "2017-07-01"
}
{
"id": 6,
"month": "2017-08-01"
}
{
"id": 7,
"month": "2017-09-01"
}
{
"id": 8,
"month": "2017-10-01"
}
{
"id": 9,
"month": "2017-11-01"
}
{
"id": 10,
"month": "2017-12-01"
}
{
"id": 11,
"month": "2018-01-01"
}
{
"id": 12,
"month": "2018-02-01"
}
{
"id": 13,
"month": "2018-03-01"
}
]
答案 0 :(得分:0)
我会像这样过滤掉数组中的唯一值-
this.unique_volumes = this.volumes.slice().map(value => value.month = new Date(value.month).getFullYear()).filter((years, index, array) => array.indexOf(years) === index);
然后在HTML中,我将遍历unique_volumes
而不是volumes
。
<option *ngFor="let volumes of unique_volumes">{{ volumes }}</option>
答案 1 :(得分:0)
尝试
([a-zA-Z0-9])+(?=-)
在html中使用它:
import {DatePipe} from '@angular/common';
.
.
volumes: Volumes[];
years: [] = [];
groupedVolumes : any;
constructor(private volumeService: VolumeService, private router: Router, private datePipe: DatePipe) {
}
ngOnInit(){
this.volumeService.getVolumes().subscribe(volumes => {
this.volumes = volumes;
for(let volume of volumes){
if(this.years.indexOf(datePipe.formatDate(volume.month, 'yyyy')) === -1)
this.years.push(datePipe.formatDate(volume.month, 'yyyy'));
}
this.groupedVolumes = this.group(this.volumes);
this.dataOk = true;
}
}