2016-07-24 2 views
0

У меня возникают проблемы с получением данных с сервера с использованием функции NgOnInit. С этими данными я хочу рисовать сюжет с использованием morris.js, но я не получаю эти данные.Angular2 OnInit, не получая данные с сервера

У меня есть служба, которая получает все репарации автомобилей от БД, а затем я хочу нарисовать ежедневный график полного возмещения. Я получаю пустоту массива репараций, и я ничего не могу рисовать.

Мой код:

constructor(_router: Router, public http: Http, private _reparacionsService: ReparacioService) { 
    this.router = _router; 
} 

getReparacions() { 
    this._reparacionsService.getReparacions().subscribe(rep => this.reparacions = rep.json()); 
} 

ngOnInit() { 
    this.getReparacions(); 
    this.getLastWeek(); 
    this.getReparacionsDia(); 
    window['Morris'].Line({ 
     element: 'repDaychart', 
     data: this.reparacionsDies, 
     xkey: 'data', 
     ykeys: ['totalReparacions'], 
     labels: ['totalReparacions'], 
     parseTime: false, 
     xLabels: "day" 
    }); 
} 

Я уже ввезли и объявил OnInit:

import {Component, OnInit} from 'angular2/core'; 
    export class DashBoard implements OnInit 

Я использую угловой бета 17. Спасибо.

ответ

1

Этот код асинхронной

this._reparacionsService.getReparacions().subscribe(rep => this.reparacions = rep.json()); 

это означает, что this.getLastWeek(); в

ngOnInit() { 
    this.getReparacions(); 
    this.getLastWeek(); 

выполняется перед this.reparacions = rep.json() выполняется

Вы, вероятно, хотите сделать что-то вроде

getReparacions() { 
    return this._reparacionsService.getReparacions().map(rep => this.reparacions = rep.json()); 
} 

ngOnInit() { 
    this.getReparacions().subscribe(data => { 
    this.getLastWeek(); 
    this.getReparacionsDia(); 
    window['Morris'].Line({ 
     element: 'repDaychart', 
     data: this.reparacionsDies, 
     xkey: 'data', 
     ykeys: ['totalReparacions'], 
     labels: ['totalReparacions'], 
     parseTime: false, 
     xLabels: "day" 
    }); 
    }); 
} 

Это работает только в том случае, если другие вызовы (getLastWeek(), getReparacionsDia() `) также асинхронны.

+0

Я попробовал это, но я получаю сообщение об ошибке: TypeError: Не удается прочитать свойство «подписаться» неопределенных Не удается прочитать свойство «подписаться» неопределенной на DashBoard.ngOnInit (dashboard.component.ts: 36) в AppView._View_DashBoard_Host0.detectChangesInternal (DashBoard_Host.template.js: 34) на AppView.detectChanges (angular2.dev.js: 23638) на AppView.detectContentChildrenChanges (angular2.dev.js: 23657) на AppView._View_Home0.detectChangesInternal (Home.template.js: 1338) –

+0

Извините, я забыл добавить 'return' в' getReparacions() ' –

+0

Хорошо, спасибо! Теперь не дает ошибок, но не рисует сюжет. Я буду искать его. –

Смежные вопросы