38 votes

Resolver Emitting Error ` ERROR Erreur : "[objet Objet]" `

J'ai un problème avec l'implémentation d'un résolveur sur mes routes car il n'y a aucun problème jusqu'à ce que j'inclue InitialDataResolver sur mon module de routage.

pages-routing.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 { }

données initiales.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();
          });

    });
  }

}

L'erreur que je rencontre est la suivante ERROR Error: "[object Object]" . voir l'instantané ci-dessous : object Object Error

118voto

Riyenz Points 1003

Cette erreur d'absence de détails est survenue lors de l'utilisation de Mozilla Firefox . donc ce que vous devez faire est de passer à Google Chrome pour voir l'erreur spécifique.

MISE À JOUR :

Vous pouvez également enregistrer l'erreur en tant que variable globale.

enter image description here

alors vous pouvez taper temp0.message pour voir le message d'erreur réel

enter image description here

enter image description here

10 votes

C'est ridicule. Je ne m'attendais pas du tout à ça. Merci pour votre réponse. J'ai résolu mon problème.

1 votes

Wow. La dernière chose à laquelle je m'attendais aussi. Merci.

2 votes

@zero01alpha Bienvenue mon pote :) J'espère que Mozilla corrigera ce problème à l'avenir

22voto

kaminarifox Points 352

Dans la console, vous pouvez enregistrer les erreurs comme

ERROR Erreur : "[objet Objet]"

comme variable globale

enter image description here

et ensuite obtenir un message d'erreur de l'objet temp0.message

4 votes

Quelle réponse qui sauve des vies ! Je vous remercie

0 votes

Soyez béni. C'est en effet un sauveur de vies.

4voto

Meyhem Points 91

J'ai trouvé une solution pour les erreurs détaillées dans Firefox. Elle est basée sur la définition d'un gestionnaire d'erreur personnalisé et l'inspection des propriétés de l'erreur par vous-même. Après ces étapes, les erreurs ont été affichées correctement, pas besoin de passer à chrome.

  1. Définir une classe de gestionnaire d'erreurs personnalisée :

    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)
    }

    }

  2. Puis l'enregistrer comme fournisseur dans le composant principal

    @NgModule({ declarations: [] imports: [] providers: [{provide: ErrorHandler, useClass: MyErrorHandler}], // <-- register MyErrorHandler bootstrap: [RootComponent] }) export class AppModule { }

0voto

xsong Points 103
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)
}

Le code ci-dessus fonctionnera pour vous.

si votre version de rxjs est 6.x vous utiliserez .pipe(map(item => !!item))

2 votes

Pourquoi ? Pourriez-vous fournir une explication, un lien ou toute autre justification ?

0voto

amku91 Points 507

Cette erreur est due à une mauvaise déclaration du routeur. De même, cette erreur ne se produit jamais dans Firefox. Vérifiez le fichier route dans chrome. #angularjs-route

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X