I have an array of objects received in a service file from a json file. When I sign it in the component and try to iterate, I get the following error:
EXCEPTION: Error in app/dashboard/features/fleet/fleetControlPanel/fleetControlPanelTemplate.html:38:14BrowserDomAdapter.logError @ browser_adapter.ts:78BrowserDomAdapter.logGroup @ browser_adapter.ts:89ExceptionHandler.call @ exception_handler.ts:53(anonymous function) @ application_ref.ts:304schedulerFn @ async.ts:131SafeSubscriber.__tryOrUnsub @ Subscriber.ts:240SafeSubscriber.next @ Subscriber.ts:192Subscriber._next @ Subscriber.ts:133Subscriber.next @ Subscriber.ts:93Subject._finalNext @ Subject.ts:154Subject._next @ Subject.ts:144Subject.next @ Subject.ts:90EventEmitter.emit @ async.ts:117NgZone._zoneImpl.ng_zone_impl_1.NgZoneImpl.onError @ ng_zone.ts:138NgZoneImpl.inner.inner.fork.onHandleError @ ng_zone_impl.ts:90ZoneDelegate.handleError @ zone.js:327Zone.runGuarded @ zone.js:233NgZoneImpl.runInnerGuarded @ ng_zone_impl.ts:100NgZone.runGuarded @ ng_zone.ts:216outsideHandler @ dom_events.ts:16ZoneDelegate.invokeTask @ zone.js:356Zone.runTask @ zone.js:256ZoneTask.invoke @ zone.js:423 EXCEPTION: TypeError: Cannot read property 'length' of undefined TypeError: Cannot read property 'length' of undefined at FleetSummaryComponent.ngOnChanges (fleetSummaryComponent.ts:62) at DebugAppView._View_FleetControlPanelComponent2.detectChangesInternal (FleetControlPanelComponent.template.js:755) at DebugAppView.AppView.detectChanges (view.ts:243) at DebugAppView.detectChanges (view.ts:345) at DebugAppView.AppView.detectContentChildrenChanges (view.ts:261) at DebugAppView._View_FleetControlPanelComponent0.detectChangesInternal (FleetControlPanelComponent.template.js:326) at DebugAppView.AppView.detectChanges (view.ts:243) at DebugAppView.detectChanges (view.ts:345) at DebugAppView.AppView.detectViewChildrenChanges (view.ts:267) at DebugAppView._View_FleetOperateComponent2.detectChangesInternal (FleetOperateComponent.template.js:891) TypeError: Cannot read property 'length' of undefined at FleetSummaryComponent.ngOnChanges (http://localhost:3000/app/dashboard/features/fleet/fleetSummary/fleetSummaryComponent.js:46:41) at DebugAppView._View_FleetControlPanelComponent2.detectChangesInternal (FleetControlPanelComponent.template.js:755:61) at DebugAppView.AppView.detectChanges (http://localhost:3000/node_modules/@angular/core/src/linker/view.js:200:14) at DebugAppView.detectChanges (http://localhost:3000/node_modules/@angular/core/src/linker/view.js:289:44) at DebugAppView.AppView.detectContentChildrenChanges (http://localhost:3000/node_modules/@angular/core/src/linker/view.js:215:37) at DebugAppView._View_FleetControlPanelComponent0.detectChangesInternal (FleetControlPanelComponent.template.js:326:8) at DebugAppView.AppView.detectChanges (http://localhost:3000/node_modules/@angular/core/src/linker/view.js:200:14) at DebugAppView.detectChanges (http://localhost:3000/node_modules/@angular/core/src/linker/view.js:289:44) at DebugAppView.AppView.detectViewChildrenChanges (http://localhost:3000/node_modules/@angular/core/src/linker/view.js:220:34) at DebugAppView._View_FleetOperateComponent2.detectChangesInternal (FleetOperateComponent.template.js:891:8)
Can someone tell me what the error is, or is there another way to repeat it? Thanks
Service file
import {Injectable} from '@angular/core'; import {Http, Response} from '@angular/http'; import {Observable} from 'rxjs/Observable'; @Injectable() export class FleetSummaryService { private url = 'app/dashboard/features/fleet/fleetControlPanel/fleetdataBase.json'; constructor(private _http: Http){ } getFleetSummary(): Observable<any[]> { return this._http.get(this.url) .map((response: Response) => <any[]>response.json()) .do(data => console.log("Data received: " + JSON.stringify(data))) .catch(this.handleError); } private handleError(error: Response){ console.error(error) return Observable.throw(error.json().error || "Server error"); } }
Component file
import {Component, OnInit, Input, OnChanges} from '@angular/core'; import {ROUTER_DIRECTIVES} from '@angular/router-deprecated'; import {FleetSummaryService} from './fleetSummaryService'; @Component({ selector: 'fleetSummary', templateUrl: 'app/dashboard/features/fleet/fleetSummary/fleetSummaryTemplate.html', directives: [ROUTER_DIRECTIVES] }) export class FleetSummaryComponent implements OnInit, OnChanges { fleetSummary: any[]; @Input() selectedTruckID: any; errorMessage: any; summary: any[];
source share