2017-01-18 15 views
2

Мой сервис для HTTP GET позвонитьУгловое 2, ResolveGuard, Угловое HTTP,

import { Injectable } from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/do'; 
import 'rxjs/add/operator/catch'; 
import { IAppInfo } from './appInfo'; 
import { IProduct } from './product'; 
@Injectable() 
export class AppInfoService { 
    private _appInfoUrl : string = "api/appInfo/appInfo.json"; 
//constructor 
constructor (private _http : Http){} 

getAppInfo() : Observable<IAppInfo[]> { 
    return this._http.get(this._appInfoUrl) 
       .map((response : Response) => <IAppInfo[]>response.json()) 
       .do(data => console.log('Service'+JSON.stringify(data))) 
       .catch(this.handleError); 
    } 
    private handleError(error : Response){ 
     console.error(error); 
     return Observable.throw(error.json().error || 'servererror'); 
    } 
} 

его моей службы я использую эту услугу в моей гвардии

import { Injectable } from '@angular/core'; 
import { Resolve } from '@angular/router'; 
import { IAppInfo } from './appInfo'; 
import { AppInfoService } from './appInfo.service'; 
@Injectable() 
export class AppInfoResolveGuard implements Resolve<IAppInfo[]> { 
    appInfo : IAppInfo[]; 
    errormessage : string; 
    constructor (private _appInfoService : AppInfoService){ 
     console.log("Resolve Guard"); 
    } 
    resolve() { 
     console.log('guard'+this._appInfoService.getAppInfo()); 
     return this._appInfoService.getAppInfo();     
    } 
} 

и передать эту решимость маршрутизатору путь

{ path: 'rklob', resolve: {app : AppInfoResolveGuard }, component: RklobAppComponent }, 

и получать эти данные в своем классе компонентов

import { Component, OnInit } from '@angular/core'; 
import { Route } from '@angular/router'; 
import { ActivatedRoute } from '@angular/router'; 
import { IAppInfo } from './appInfo'; 
import { AppInfoService } from './appInfo.service'; 
import { IWelcome } from './home/welcome'; 
@Component({ 
    selector: 'rklob-app-main', 
    moduleId: module.id, 
    templateUrl: 'rklob-app.component.html' 
}) 
export class RklobAppComponent implements OnInit { 
    appInfo : IAppInfo[]; 
    appWelcome : IWelcome; 
    appAbout : IAbout; 
    appService : IServices[]; 
    appPerson : IPerson[]; 
    appClientGallery : IClientGallary[]; 
    appPackage : IPackage[]; 
    appAddresses : IAddress[]; 
    errormessage : string; 

    constructor (private _route : ActivatedRoute, private _appInfoService :  AppInfoService){ 
     console.log('component'); 
    } 
    ngOnInit(){ 
     this.appInfo = this._route.snapshot.data['app']; 
     for(let data of this.appInfo){ 
      console.log(data.captionData); 
      this.appWelcome.captionData = data.captionData; 
      this.appWelcome.welcomeInfo = data.welcomeInfo; 
     } 
    } 
} 

console.log(data.captionData); показать отобразить значение, но его можно назначить this.appWelcome.captionData и this.appWelcome.welcomeInfo = data.welcomeInfo; его дать мне ошибку как

EXCEPTION: Uncaught (in promise): TypeError: Cannot set property 'captionData' of undefined TypeError: Cannot set property 'captionData' of undefined

как я могу назначить this.appWelcome.captionData = data.captionData;

+1

ошибка относится к вашему 'appWelcome' объект, который не инициализирован. Это не относится к возвращенным данным. –

+0

Я не вижу никаких проблем. –

+0

если я настроен следующим образом ** appWelcome: IWelcome = {captionData: "", welcomeInfo: ""}; ** его работа для меня, но это правильный способ или нет? пожалуйста, скажи мне. Если ** appWelcome - это массив объекта **, тогда я могу сделать это следующим образом:>> appWelcome: IWelcome [] = [{captionData: "", welcomeInfo: ""}]; **? это правда –

ответ

0

appWelcome не инициализирован. Вы можете присвоить пустой объект к нему, и что бы решить эту проблему (обратите внимание, что вам может понадобиться, чтобы добавить атрибуты с нулевыми значениями, чтобы удовлетворить интерфейс IWelcome во время компиляции):

appWelcome : IWelcome = {}; 
Смежные вопросы