38

我在我的路由上实现解析器时遇到问题,因为在我包含InitialDataResolver在我的路由模块中之前它没有问题。

页面路由.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { FrontComponent } from '../layouts/front/front.component';
import { HomeComponent } from './home/home.component';
import { DocsComponent } from './docs/docs.component';
import { InitialDataResolver } from './../shared/resolvers/initial-data.resolver';

const routes: Routes = [
  {
    path: '',
    component: FrontComponent,
    children: [
      { path: '', component: HomeComponent },
      { path: 'docs', component: DocsComponent }
    ],
    resolve: {
      init: InitialDataResolver
    },
  }
];

@NgModule({
  imports: [ RouterModule.forChild(routes) ],
  exports: [ RouterModule ],
  providers: [ InitialDataResolver ]
})
export class PagesRoutingModule { }

初始数据.resolver.ts

import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';
import { Observer } from 'rxjs/Observer';
import { AppInitService } from '../services/app-init.service';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class InitialDataResolver implements Resolve<any> {

  constructor(private appInitService: AppInitService) {}

  resolve(route: ActivatedRouteSnapshot,
          state: RouterStateSnapshot): Observable<any> {
    return Observable.create((observer: Observer<any>) => {

      this.appInitService.init()
          .subscribe(data => {
            this.appInitService.preload();
            observer.next(data);
            observer.complete();
          });

    });
  }

}

我遇到的错误是ERROR Error: "[object Object]". 请参阅下面的快照: 对象对象错误

4

8 回答 8

118

使用Mozilla Firefox. 所以你需要做的是切换Google Chrome到查看具体错误。

更新:

您还可以将错误存储为全局变量

在此处输入图像描述

然后您可以键入temp0.message以查看实际的错误消息

在此处输入图像描述

在此处输入图像描述

于 2018-06-27T05:43:07.183 回答
22

在控制台中,您可以存储错误,例如

错误错误:“[对象对象]”

作为全局变量

在此处输入图像描述

然后从对象获取错误消息temp0.message

于 2019-06-04T08:33:20.513 回答
4

我找到了在 Firefox 中工作的详细错误的解决方案。它基于定义自定义错误处理程序并自己检查错误属性。经过这些步骤,错误显示正常,无需切换到chrome。

  1. 定义自定义错误处理程序类:
import { ErrorHandler } from '@angular/core'

export class MyErrorHandler implements ErrorHandler {

    handleError(error: any) {
        // console.error(Object.getOwnPropertyNames(error))
        // Object.getOwnPropertyNames(error).forEach(p => console.error(error[p]))
        console.error(error.fileName, error.lineNumber, ':', error.columnNumber, '\n', error.message, error.rejection)
    }

}
  1. 然后将其注册为主要组件中的提供者
@NgModule({
    declarations: []
    imports: []
    providers: [{provide: ErrorHandler, useClass: MyErrorHandler}], // <-- register MyErrorHandler
    bootstrap: [RootComponent]
})
export class AppModule { }
于 2019-04-22T11:13:01.267 回答
0

如果您在没有 --prod 的情况下构建并在 Web 服务器中托管,则该错误可能会隐藏 firefox 的详细信息,如果您在 Web 服务器上托管以获取有关错误的详细信息,请尝试使用 --prod 构建。

于 2018-11-04T14:28:32.043 回答
0

一次性解决方案:在 dist/vendor.bundle.js 中找到函数 defaultErrorLogger 并添加:

for (var _i = 1; _i < arguments.length; _i++) {
    values[_i - 1] = arguments[_i];
}
console.log(arguments);
console.error.apply(console, values); code here

然后刷新页面而不重新编译

于 2019-02-27T08:53:51.893 回答
0

主要是在使用来自“@angular/fire”的数据库对象时发现此错误

这可以通过使用来解决this.db.object('/' + ....).subscribe(...)

于 2019-04-23T13:03:03.833 回答
0
resolve(route: ActivatedRouteSnapshot,
      state: RouterStateSnapshot): Observable<any> {
    return Observable.create((observer: Observer<any>) => {

      this.appInitService.init()
          .subscribe(data => {
            this.appInitService.preload();
            observer.next(data);
            observer.complete();
          });

    }).map(item => !!item)
}

上面的代码将为您工作。

如果您的 rxjs 版本是 6.x,您将使用.pipe(map(item => !!item))

于 2018-06-26T11:09:26.547 回答
0

此错误是由于错误的路由器声明引起的。在 Firefox 中也永远不会出现确切的错误。检查 chrome 中的路由文件。#angularjs-路由

于 2018-08-22T10:03:47.920 回答