Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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
Javascript Angular2自定义错误处理程序,为什么我可以登录到控制台而不能登录到模板?_Javascript_Angular - Fatal编程技术网

Javascript Angular2自定义错误处理程序,为什么我可以登录到控制台而不能登录到模板?

Javascript Angular2自定义错误处理程序,为什么我可以登录到控制台而不能登录到模板?,javascript,angular,Javascript,Angular,我想在我的Angular2应用程序中有自定义错误。因此,我在组件中扩展了ErrorHandler: import { Component, ErrorHandler, OnInit } from '@angular/core'; import { GenericError } from './generic-error.component'; @Component({ selector: 'custom-error-handler', templateUrl: 'app/err

我想在我的Angular2应用程序中有自定义错误。因此,我在组件中扩展了ErrorHandler:

import { Component, ErrorHandler, OnInit } from '@angular/core';
import { GenericError } from './generic-error.component';

@Component({
    selector: 'custom-error-handler',
    templateUrl: 'app/error-handler/custom-error-handler.component.html?' + +new Date()
})

export class CustomErrorHandler extends ErrorHandler {
    errorText: string;

    constructor() {
        super(false);
    }

    ngOnInit() {
        this.errorText = 'Initial text!';
    }

    public handleError(error: any): void {
        if (error.originalError instanceof GenericError) {
            console.info('This is printed to console!');
            this.errorText = "I want it to print this in the template!";
        }
        else {
            super.handleError(error);
        }
    }
}
throw new GenericError();
我的模板仅包含:

<span style="color:red">{{errorText}}</span>
它用handleError点击代码并打印到控制台,但它不会用以下内容更新我的模板errorText:

“我希望它在模板中打印此内容!”

这就像它忽略了我的模板,当它在handleError函数中时

这里有什么问题

*添加了更多信息*

我想我应该补充一些信息。下面是我为CustomErrorHandler制作的模块(可能是提供者的问题?)

实际上,CustomErrorHandler只有一个实例(我用Augury Chrome插件检查过)

为完整起见,以下是GenericError组件:

export class GenericError {
    toString() {
        return "Here is a generic error message";
    }
}

解决方案是按照问题的评论轨道中的建议添加一项服务。这样我就可以在组件中设置属性,并最终在模板中显示它

我创建了这个服务,这样它就有了一个接受一个参数的函数。注入服务,从组件函数中的handleError调用服务的函数,并在模板中发送我想要的文本作为参数。然后我使用一个可观察的,将文本返回到组件

在组件的构造函数中,我添加了这个观察者

let whatever = this.cs.nameChange.subscribe((value) => {
  setTimeout(() => this.errorText = value);
});
我需要添加setTimeout,否则在第二次更改可观察对象之前它不会更新模板


呸!Angular团队应在未来的版本中简化此全局异常处理。

您将在哪里包括?我将其包括在我的应用程序组件模板中。听起来,无论您从哪个组件抛出错误,都会创建自己的组件实例。也许可以尝试使用像Augury这样的工具来检查范围层次结构,并确保该组件是抛出错误的组件的子组件。或者可能这需要在服务中,以便更容易在组件之间共享数据。希望这对您有所帮助。您有一个服务实例和一个组件实例。检查调用创建两个不同类的构造函数。一个用于组件,一个用于服务。然后在组件中注入服务。
let whatever = this.cs.nameChange.subscribe((value) => {
  setTimeout(() => this.errorText = value);
});