Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular2 ng烤面包机_Angular_Toast_Custom Error Handling - Fatal编程技术网

Angular2 ng烤面包机

Angular2 ng烤面包机,angular,toast,custom-error-handling,Angular,Toast,Custom Error Handling,我试图在处理全局错误时使用ErrorHandler的实现来发布toast。问题是祝酒词永远不会出现。我在控制台中显示的publishToast方法中有一个console.log,没有出现其他错误 如果我在一个组件中创建了相同的publishToast方法,那么toast工作得很好,因此它似乎与组件的分离有关 @Injectable() export class AppErrorHandler implements ErrorHandler { //-----------------------

我试图在处理全局错误时使用ErrorHandler的实现来发布toast。问题是祝酒词永远不会出现。我在控制台中显示的publishToast方法中有一个console.log,没有出现其他错误

如果我在一个组件中创建了相同的publishToast方法,那么toast工作得很好,因此它似乎与组件的分离有关

@Injectable()
export class AppErrorHandler implements ErrorHandler {

//---------------------------------------------------------------------//

constructor(private _toastyService: ToastyService) { }

//---------------------------------------------------------------------//

handleError(error: any): void {
    console.log("Error", error)
    alert("Error")
    this.publishToast(error, "An unexpected error occured")
}//handleError

//---------------------------------------------------------------------//

publishToast(error: any, msg?: string) {
    console.log("Publishing Toast")

    let title = "Error " + (error.statusCode ? error.statusCode : '')
    let message = msg ? msg : ''
        + error.body ? error.body : ''

    // Create the instance of ToastOptions 
    var toastOptions: ToastOptions = {
        title: title,
        msg: message,
        showClose: true,
        timeout: 5000,
        theme: 'bootstrap',
        onAdd: (toast: ToastData) => {
        },
        onRemove: function (toast: ToastData) {
        }

    };
    this._toastyService.error(toastOptions);


}//addErrorToast

}//Cls

有什么想法吗?

这是因为handleError()方法在角度“区域”之外执行。简单地说:Angular不会在handleError()调用后运行更改检测机制。DOM未更新,因此toast不可见

通常您不需要担心区域,但ErrorHandler是例外情况之一。如果要运行一些需要触发更改检测的代码,则需要将其显式包装在ngZone.run调用中,如下所示:

import { ErrorHandler, Injectable, NgZone } from "@angular/core";
import { ToastyService } from 'ng2-toasty';

@Injectable()
export class AppErrorHandler implements ErrorHandler {
    constructor(
        private toastyService: ToastyService,
        private ngZone : NgZone) { }

    handleError(error: any): void {
        this.ngZone.run(() => {
            this.publishToast(error, "An unexpected error occured");
        });  
    }
如果你对这些细节感兴趣的话,这里有很多关于区域的博客文章。例如:

发生这种情况是因为handleError()方法在角度“区域”之外执行。简单地说:Angular不会在handleError()调用后运行更改检测机制。DOM未更新,因此toast不可见

通常您不需要担心区域,但ErrorHandler是例外情况之一。如果要运行一些需要触发更改检测的代码,则需要将其显式包装在ngZone.run调用中,如下所示:

import { ErrorHandler, Injectable, NgZone } from "@angular/core";
import { ToastyService } from 'ng2-toasty';

@Injectable()
export class AppErrorHandler implements ErrorHandler {
    constructor(
        private toastyService: ToastyService,
        private ngZone : NgZone) { }

    handleError(error: any): void {
        this.ngZone.run(() => {
            this.publishToast(error, "An unexpected error occured");
        });  
    }
如果你对这些细节感兴趣的话,这里有很多关于区域的博客文章。例如: