【发布时间】:2019-10-30 14:25:24
【问题描述】:
我有一个全局错误处理程序,我在其中处理客户端错误和服务器错误。
为了向用户提供反馈,我想打开一个返回错误消息的模式。
因此我实现了一个模态:
import {Component} from '@angular/core';
import {BsModalRef, BsModalService} from 'ngx-bootstrap';
import {Button} from '../../layout-models/button.model';
@Component({
selector: 'error-modal',
templateUrl: './error-modal.component.html',
styleUrls: ['./error-modal.component.scss']
})
export class ErrorModalComponent {
title: string;
buttonTitle = 'OK';
type: 'error';
button: Button;
protected modalRef: BsModalRef;
constructor(protected modalService: BsModalService) {}
public show(title: string, message: string) {
this.title = title;
this.modalRef = this.modalService.show(
message,
Object.assign({}, { class: `modal-banner ${this.type}`})
);
}
hide() {
if (this.modalRef) {
this.modalRef.hide();
}
}
}
在我的通知服务中:
import {Injectable, NgZone} from '@angular/core';
import { ErrorModalComponent } from '../error-modal.component';
@Injectable({
providedIn: 'root'
})
export class NotificationService {
public errorModalComponent: ErrorModalComponent;
showError(title: string, message: string): void {
this.errorModalComponent.show(title, message);
}
}
这会导致
Uncaught TypeError: Cannot read property 'show' of undefined
我觉得我犯了一些根本性的错误——这样做的主要目的是建立一个集中的模式。这是可能的还是我需要在我想显示错误处理模式的每个组件中使用 ModalComponent?
【问题讨论】:
-
您可以在服务中使用 observable 来确定何时显示和隐藏模式。模态将位于 (
app.component) 的根部。在app.component.ts中,您将订阅该可观察对象并根据从订阅中收到的值显示/隐藏模式。 -
你能举个简单的例子吗?这对我有很大帮助 - 我对订阅不太熟悉,因为我对 Angular 很陌生!
-
这是一个粗略的想法,您可能需要进行更改。 stackblitz.com/edit/angular-9vnzma
标签: javascript angular error-handling modal-dialog inject