Http-ответ обнаружен, но представление не обновляется с помощью Angular 6.x - PullRequest
0 голосов
/ 05 декабря 2018

Я использую Angular 6.x для создания страницы входа.Я использовал перехватчик ошибок HTTP, чтобы перехватить все проблемы HTTP.Вот как выглядит мой перехватчик ошибок и app.module

`` import {Injectable} from '@ angular / core';импортировать {HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpErrorResponse, HTTP_INTERCEPTORS} из '@ angular / common / http';import {Observable, throwError} из 'rxjs';import {catchError} из 'rxjs / operator';

/**
 * Intercepts the HTTP responses, and in case that an error/exception is thrown, handles it
 * and extract the relevant information of it.
 */
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
    /**
     * Intercepts an outgoing HTTP request, executes it and handles any error that could be triggered in execution.
     * @see HttpInterceptor
     * @param req the outgoing HTTP request
     * @param next a HTTP request handler
     */
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(req).pipe(
            catchError(errorResponse => {
                let errMsg: string;
                if (errorResponse instanceof HttpErrorResponse) {
                    const err = errorResponse.message || JSON.stringify(errorResponse.error);
                    errMsg = `${errorResponse.status} - ${errorResponse.statusText || ''} Details: ${err}`;
                } else {
                    errMsg = errorResponse.message ? errorResponse.message : errorResponse.toString();
                }
                console.log(errMsg)
                return throwError(errorResponse);
            }));
    }
}

/**
 * Provider POJO for the interceptor
 */
export const ErrorInterceptorProvider = {
    provide: HTTP_INTERCEPTORS,
    useClass: ErrorInterceptor,
    multi: true,
};

`` `

Я добавил то же самое в app.module.ts

` ``

providers: [
    DataService,
    DatePipe,
    ErrorInterceptorProvider,
    DataBaseService,
],

`` `

Когда я выполняю входящий вызов, который не удается, ошибка фиксируется правильно, и я возвращаюсь к обработчику ошибок в компоненте

` ``

login(args: EventData) {
    ..... Some code

    //call login service
    this.service.login(this.user).subscribe((result) => {
        console.log("token: ", result.token);

        .... Some code on success

    }, (error) => {
        this.processing = false;
        this.isError = true;
        loginBtn.isEnabled = true;
        switch (error.status.toString()) {
            case "401":
                lbl.text = localize("invalid_user_pass");
                break;
            case "200":
                lbl.text = localize("server_error");
                break;
            default:
                lbl.text = localize("invalid_user_pass");
                break;
        }
        this.cleanUser();
    });
}

`` `

Проблема в том, что, хотя я обновляю переменные в компоненте, мое представление не отражает эти изменения.Я нашел похожую ссылку для очень похожей проблемы с NgZone.Я чувствую, что даже я сталкиваюсь с подобной проблемой, но не могу найти решение в настоящее время.Я попытался вернуть значения через ngZone в методе перехвата ошибок.Однако проблема не была решена.Может ли кто-то помочь в определении первопричины?Поскольку эта проблема, похоже, связана исключительно с Angular, добавьте теги Angularjs вместе с тегами Nativescript.

...