В Angular2 в пользовательском обработчике ошибок, как получить доступ к трассировке стека ошибок с номерами строк из файлов.ts

Я пытаюсь реализовать собственный обработчик ошибок в своем приложении, следуя документации, но не знаю, как получить доступ к выводу оригинальной трассировки стека ErrorHandler. Зачем мне оригинал? Трассировка стека, выводимая на консоль оригинальным ErrorHandler, относится к номерам строк из файлов.ts машинописного текста (по крайней мере, для файлов моего приложения). Трассировка стека, доступная в пользовательском ErrorHandler, ссылается на номера строк из файлов javascript.js.

Пример приложения Angular2 выглядит следующим образом:

Файл main.ts

import {bootstrap} from 'angular2/platform/browser';
import {App} from './app';
import {ExceptionHandler, provide} from "angular2/core";
class MyExceptionHandler  {
    call(error, stackTrace = null, reason = null) {
        let msg = ExceptionHandler.exceptionToString(error);
        console.log(msg);
        console.log('Message: ' + error.message);
        console.log('Stack trace: ' + stackTrace);
    }
}
bootstrap(App, [provide(ExceptionHandler, {useClass: MyExceptionHandler})]);
//bootstrap(App, []);

Файл app.ts

import {Component} from 'angular2/core'
@Component({
  selector: 'my-app',
  providers: [],
  template: `<div><h2>Hello {{name}}</h2></div>`,
  directives: []
})
export class App {
  constructor() {
    this.name = 'Angular2';
    let arr = ['one', 'two'];
    let val = arr[4].id;
  }
}

Последний оператор конструктора приложения выдает ошибку, как и предполагалось. Мой пользовательский обработчик ошибок выводит на консоль несколько вещей, но трассировка стека содержит только номера строк из файлов javascript.

Если вы прокомментируете загрузчик, использующий пользовательский ExceptionHandler, и выполните только исходный загрузчик и проверите консоль, будет трассировка стека с номерами строк из файлов TypeScript. Как ниже (app.ts:18)

angular2.dev.js:23501 TypeError: Cannot read property 'id' of undefined
    at new App (app.ts:18)

Я хотел бы как-то получить доступ к этому выводу в моем собственном обработчике и отправить его куда-нибудь еще вместо печати на консоль, но с номерами строк из файлов.ts.

1 ответ

import {ExceptionHandler, provide} from "angular2/core";

export interface IExceptionHandler {
    call(exception: any, stackTrace?: any, reason?: string): void;
}

export class MyCutomExceptionHandler implements IExceptionHandler {
    call(exception: any, stackTrace: any, reason: string): void {

        alert(exception);
        let msg = ExceptionHandler.exceptionToString(exception);
        console.log("micronyks");
        console.log(msg);
        console.log('Message:---->N ' + exception.message);
        console.log('Stack trace:----->N ' + stackTrace);
    }
}

@Component({
selector: 'my-app', 
  template: `
        main component   
  `,
  directives: [],
})
export class ParentCmp {
    constructor() {
    this.name = 'Angular2';
    let arr = ['one', 'two'];
    let val = arr[4].id;
  }

}

bootstrap(ParentCmp, [provide(ExceptionHandler, {useClass: MyCutomExceptionHandler})]);
Другие вопросы по тегам