2016-09-22 51 views
0

我是新手角度2。我正在建立一個網站來開始玩這個平臺。問題是,當我查詢API消息時,無法正確轉換對象。雖然我認爲承諾存在問題。我如何解決承諾的翻譯?

代碼成分如下:

import { Component }  from '@angular/core'; 
import { Router }   from '@angular/router'; 

import { AuthenticationService } from '../Service/Authentication.service'; 
import { NoticiesService }   from '../Service/Noticies.service'; 
import { Logger }     from '../Service/Logger.service'; 
import { Noticia }     from '../Model/Noticia'; 

@Component({ 
    selector: 'my-home', 
    templateUrl: 'app/View/html/Home.component.html', 
    styleUrls: ['app/Content/css/app.component.css'], 
}) 

export class HomeComponent { 

    llistaNoticies: Noticia[]; 
    missNoticies = 'Noticies Actuals:'; 
    authenticatedUser = localStorage.getItem('usuari'); 
    sessionUp = this._serviceAuthentication.isSession; 

    constructor(
     private _logger: Logger, 
     private _serviceAuthentication: AuthenticationService, 
     private _noticiesService: NoticiesService) { } 

    getNoticies(): void { 
     this._noticiesService.getNoticies() 
     .then(noticies => this.llistaNoticies = noticies); 
     console.log('getNoticies() passat!') 
    } 

    ngOnInit(): void { 
     this.getNoticies() 
     console.log('ngOnInit() passat!') 
    } 

    logOut() { 
     this._serviceAuthentication.logOut(); 
    } 
} 

服務的準則是:

import { Injectable }   from '@angular/core'; 
import { Router }    from '@angular/router'; 
import { Http, Response, 
    Headers, RequestOptions } from '@angular/http'; 

import 'rxjs/add/operator/toPromise'; 

import { Noticia }    from '../Model/Noticia'; 

@Injectable() 
export class NoticiesService { 

    private URLNoticies = 'http://localhost:50541/api/Noticies'; 

    constructor(
     private _router: Router, 
     private _http: Http) { } 

    getNoticies(): Promise<Noticia[]> { 
     return this._http.get(this.URLNoticies) 
      .toPromise() 
      .then(response => response.json().data as Noticia[]) 
      .catch(this.handleError); 
    } 

    private handleError(error: any): Promise<any> { 
     console.error('An error occurred', error); 
     return Promise.reject(error.message || error); 
    } 

} 

的HTML代碼的組件:

<div class="block-general m-t-1 subTitolPag"> 
    <h2 class="titolPag">Notícies d'actualitat:</h2> 
</div> 

<div class="row p-a-1"> 
    <div id="block-central" class="block-sub col-md-6 offset-md-2"> 
     <div *ngFor="let noticia of llistaNoticies"> 
      <hr /> 

      <div class="card"> 

       <img class="card-img-top imgNoticia" src="{{noticia.PathImatge}}" alt="Card image cap" style="max-width: 100%;"> 

       <div class="card-block"> 
        <h4 class="card-title titolNoticia">{{noticia.Titol}}</h4> 

        <p class="card-text">{{noticia.Cos}}</p> 
        <div class="clearfix"> 
         <h5 class="pull-xs-right">Autor: <span class="label label-default pull-xs-right">{{noticia.Autor}}</span></h5> 
        </div> 
        <div> 
         <h6 class="pull-xs-right">Data de: {{noticia.Data}}</h6> 
        </div> 
       </div> 

      </div> 
     </div> 
    </div> 

    <div class="col-md-3 block-sub m-x-1 p-a-1"> 
     <p>Usuari registrat: <span class="text-uppercase">{{authenticatedUser}}</span></p> 
     <div class="clearfix m-t-1"> 
      <button type="submit" class="btn btn-primary pull-xs-right" (click)="logOut()">Desconecta</button> 
     </div> 
    </div> 
</div> 

和類:

export class Noticia { 
    public Id: number; 
    public Titol: string; 
    public Cos: string; 
    public Autor: string; 
    public PathImage: string; 
    public Data: Date; 
} 

如果有人發現錯誤在哪裏,並告訴我在哪裏可以找到明確的承諾將非常感激。

謝謝!

+0

是有特殊原因使用'Promise',而不是'Observable'? – mxii

+0

不,我只是研究和教程,跟着官方網站做得很好Angular2。 –

回答

0

我推薦使用Observable s。

@Injectable() 
export class NoticiesService { 

    private URLNoticies = 'http://localhost:50541/api/Noticies'; 

    constructor(
     private _router: Router, 
     private _http: Http) { } 

    getNoticies(): Observable<Noticia[]> { 
     return this._http.get(this.URLNoticies) 
      .map(response => response.json().data as Noticia[]) 
      .catch(this.handleError); 
    } 

    private handleError(error: any): Observable<any> { 
     console.error('An error occurred', error); 
     return Observable.of(error.message || error); 
    } 
} 

和消費服務:

getNoticies(): void { 
    this._noticiesService.getNoticies() 
    .subscribe(
     noticies => this.llistaNoticies = noticies, 
     err => console.log(err) 
    ); 
    console.log('getNoticies() passat!') 
}