Angular 2 * ngfor не обновляется с помощью последовательных ответов на HTTP-запросы

У меня есть пустой массив, называемый строками, и я хочу отобразить его с помощью * ngFor. В каждой строке массива я передаю ответ от http-запроса. Все http-запросы вызываются последовательно. Несмотря на то, что массив загружается правильно, *ngFor никогда не обновляется. Я хочу отображать каждую строку последовательно к моменту получения ответа на запрос.

<div class="row" >
    <my-rows 
       *ngFor="let row of rows | keys; trackBy: trackByFn; let index = index"
       [month]='row.value'
       [title]='row.key'>
    </my-rows>
</div>
getRerports(url: string, dates: any, id: any){
    let params = new URLSearchParams()
    params.set('company_id',id)
    params.set('date',dates[0])
    this.authHttp.get(this._getReportsUrl,{search:params})
        .subscribe(
            data=>{
                let formatedDate = moment(data.json().date,'YYYY-MM-DD').format('MMMM YYYY')
                this.rows[formatedDate] = data.json()
                dates.splice(0,1)
                this.flag = false
                if(dates.length>0){
                    this.getRerports(this._getReportsUrl,dates, id)
                }else{
                    this.flag=true
                }
            },
            err=> console.log(err)
        )
}

trackByFn(index:any, item:any) {
    return index;
}

person dimitris maf    schedule 04.04.2017    source источник
comment
больше кода, пожалуйста.   -  person n00dl3    schedule 04.04.2017
comment
разместите детали вашего http-запроса, пожалуйста.   -  person Pengyy    schedule 04.04.2017
comment
@ n00dl3 Я добавил запрос http   -  person dimitris maf    schedule 04.04.2017
comment
@Pengyy Я добавил запрос http   -  person dimitris maf    schedule 04.04.2017


Ответы (2)


Используйте ChangeDetectorRef, если представление не обновляется.

constructor(private ref: ChangeDetectorRef) 

Используйте this.ref.detectChanges() при обновлении массива.

person RemyaJ    schedule 04.04.2017
comment
Кажется, это не работает. Я разместил его сразу под обновлением массива. - person dimitris maf; 04.04.2017
comment
Правильно ли вы получаете значение внутри массива? Если это просто представление, которое не обновляется, это должно работать. - person RemyaJ; 04.04.2017
comment
Да, массив обновляется правильно, и все запросы выполняются успешно. Когда я использую переменную флага с *ngIf во внешнем div, я получаю сразу все строки. Дело в том, что я хочу печатать их последовательно. - person dimitris maf; 04.04.2017

Я пытался изменить способ предоставления объекта массиву строк и вместо

this.rows[formatedDate] = data.json()

Я использовал это:

let object = {key:formatedDate, value: data.json()}
                this.rows.push(object)

и, кажется, работает просто отлично. Значит проблема была в инициализации массива.

person dimitris maf    schedule 11.04.2017