В 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})]);