Выпадающий список заполнен из данных json

Я хочу, чтобы в моем раскрывающемся списке отображались 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"
}
]

вы должны сохранить массив уникальных лет в одной переменной в файле component.ts и использовать это

Pavankumar Shukla 19.07.2018 16:44

Проблема в том, что когда он будет подключен к базе данных, эти годы будут все время меняться. Поэтому его нужно заполнить из данных json

L.C 19.07.2018 16:52

пожалуйста, опубликуйте свой код component.ts и структуру тома

Pavankumar Shukla 19.07.2018 16:54

Я добавил свой код component.ts и файл моих томов

L.C 19.07.2018 17:04
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
4
44
2

Ответы 2

Я бы отфильтровал уникальные значения в массиве, сделав что-то вроде этого:

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>

С этим есть проблема. value.month отображает ошибку: номер не может быть присвоен дате.

L.C 19.07.2018 17:33

@ L.C обновите также HTML-код с учетом вышеизложенного. вам нужно изменить volumes.month с помощью конвейера даты, просто на {{volume}}.

Patiss 20.07.2018 11:15

Проблема заключается в функции slice (). Для этого нужен номер.

L.C 23.07.2018 12:07

попробуй это

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;
    }

}

используйте это в html:

<div class = "row justify-content-center">
    <div class = "col-4s">
    <p>Financial Year:</p>
    </div>
    <div class = "col-4s">
        <select>
            <option *ngFor = "let year of years">{{ year }}</option>
        </select>
    </div>
</div>

Это кажется правильным, но я изо всех сил пытаюсь заставить его работать. Кажется, проблема с DatePipe. У него есть только функция преобразования, а не formatDate. Также не любит годы: [] = []

L.C 19.07.2018 17:47

Другие вопросы по теме