Angular2 + Primeng ошибка обратного вызова - PullRequest
0 голосов
/ 21 мая 2018

Я использую primeNG galleria для отображения изображений, проблема в том, что некоторые ссылки уже устарели.Я бы хотел как-то поставить запасной вариант на случай, если при ошибке отобразится какое-то изображение по умолчанию (например, событие onError).Есть какой-то недокументированный способ сделать это?

1 Ответ

0 голосов
/ 21 мая 2018

Когда запрос к серверу выполняется с помощью httpclient, он также предоставляет способ работы с наблюдаемыми реактивными расширениями (rx).Эти наблюдаемые содержат метод catch, в котором вы можете обработать ошибку.

Я использовал его, чтобы перехватить ошибки с сервера и показать информацию об ошибках на экране.Может быть, вы можете написать логику для отображения изображения по умолчанию или что-то подобное, вот код.

import { Component, ViewChild, Input, OnInit, Injectable, Injector } from '@angular/core';
import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';
import { URLSearchParams, QueryEncoder,Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/catch';
import {ICustomer  } from '../components/table/Customer'
import { NotificationsService } from './notification.service';
import { IClientmessage } from './clientmessage';
import { DatabaseServiceIsbusy } from './databaseserviceIsbusy.service';

@Injectable()
export class CustomerserviceService {
    constructor(private http: HttpClient,private httpold: Http, private notificationService: NotificationsService, private databaseservice: DatabaseServiceIsbusy) {       
    }

    private baseUrlTask = 'http://localhost:4584/customer'

    private httpOptions = {
        headers: new HttpHeaders({ 
          'Access-Control-Allow-Origin':'*',
          'Content-Type': 'application/json',
        })
      };

    public addCustomer(customer: ICustomer):Observable<IClientmessage>{
        return this.http.post<IClientmessage>(this.baseUrlTask, customer,this.httpOptions).catch(error =>this.handleError(error));;
    }   

    private handleError(error: HttpErrorResponse): Observable<any> {
        console.error(error.error);
         let errormessage:IClientmessage= error.error
        this.notificationService.notify(errormessage.severity, errormessage.summary,errormessage.detail);
        this.databaseservice.displayLoader(false);
        return Observable.throw(error.error || 'Server error');
    }
...