javascript - Angular 5 自定义错误处理程序 : Display Error-message

标签 javascript html angular error-handling angular5

我正在尝试为 Angular 5 创建一个错误处理程序。如果通过我的 CustomErrorHandler 触发错误,则应更新前端。 问题是变量更新后没有任何变化。

错误处理程序.service.ts

import {ErrorHandler, Injectable} from '@angular/core';
import {Subject} from "rxjs/Subject";

@Injectable()
export class CustomErrorHandler implements ErrorHandler {
    message: String = "";
    isVisible: boolean = false;

    visibilityChange: Subject<boolean> = new Subject<boolean>();

    constructor() {
        this.visibilityChange.subscribe((value) => {
            this.isVisible = value
        });
    }

    handleError(error) {
        console.error(error);
        this.message = "ERROR: " + error.toString();
        this.visibilityChange.next(true);
    }
}

错误消息.component.ts

import {Component} from '@angular/core';
import {CustomErrorHandler} from "../../../services/error-handler.service";

@Component({
    selector: 'app-error-message',
    templateUrl: './error-message.html',
})

export class ErrorMessageComponent {
    public message: String = "";
    public isVisible: boolean = false;

    constructor(private customErrorHandler: CustomErrorHandler) {
        this.isVisible = customErrorHandler.isVisible;
    }
}

错误处理程序.html

<div class="alert alert-danger" id="app-error" *ngIf="isVisible">
    {{message}}
</div>

app.html

<app-nav></app-nav>
<div class="container">
    <div class="jumbotron">
        <app-error-message></app-error-message>
        <app-info-message></app-info-message>
        <router-outlet></router-outlet>
    </div>
</div>
<app-footer></app-footer>

app.module.ts

@NgModule({
    declarations: [
        AppComponent,
        ErrorMessageComponent,
        .....
    ],
    imports: [
        BrowserModule,
        FormsModule,
        HttpClientModule,
        AngularFontAwesomeModule,
        routing
    ],
    providers: [
        UserService,
        {
            provide: ErrorHandler,
            useClass: CustomErrorHandler
        },
        CustomErrorHandler
    ],
    bootstrap: [AppComponent]
})
export class AppModule {
}

有人知道我做错了什么吗?

最佳答案

对于 rxjs 订阅,您可能必须使用更改检测。

    constructor(private changeDetection: ChangeDetectorRef) {
    this.visibilityChange.subscribe((value) => {
        this.isVisible = value; this.changeDetection.detectChanges();
    });
}

关于javascript - Angular 5 自定义错误处理程序 : Display Error-message,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48498555/

相关文章:

javascript - javascript中的鼠标悬停事件不会输出

php - 使用 iPad 访问和发送 HTML/PHP 表单时结果不一致

javascript - 悬停不识别图像

javascript - 是否可以使用 Jest 测试旧的非模块 JavaScript?

javascript - 如何处理 <Empty Div>

javascript - document.getElementsByName 不适用于单选按钮中的动态值

angular - 在 Angular2 中,您如何检测过滤器/管道未返回任何结果

angular - 在定义 NgModule 时使用外部 JSON 文件的值

angular - PWA 离线授权

javascript - componentDidMount 如何在执行之前等待来自 redux 存储的值(不使用 setTimeout)?