2017-04-10 3 views
0

Ich habe einen RouteConfigBuilder für meinen speziellen Zweck implementiert, löschen Sie die Routen Deklarationen mit benutzerdefinierten Variablen.Angular 2 AOT Kompilierungsfehler - Neue Instanz des Objekts beim Erstellen von Routen

routen builder.type.ts

export class RouteBuilder { 
    private routeConfigBuilders: RouteConfigBuilder[] = []; 
    private currentRouteConfig: RouteConfigBuilder; 

    public add(routeConfigBuilder: IRouteConfigBuilder): RouteBuilder { 
    this.routeConfigBuilders.push(RouteConfigBuilder.get(routeConfigBuilder)); 
    return this; 
    } 

    public build(): Routes { 
    const routes: Routes = []; 
    let routeConfig: IRouteConfig; 

    for (const routeConfigBuilder of this.routeConfigBuilders) { 
     routeConfig = routeConfigBuilder.build(); 
     routes.push(this.routeConfigToRoute(routeConfig)); 
    } 

    return routes; 
    } 

    private routeConfigToRoute(routeConfig: IRouteConfig): Route { 
    const route: Route = {}; 

    for (const prop in routeConfig) { 
     if (routeConfig[prop] 
     || ((typeof routeConfig[prop] === 'string') 
      && (routeConfig[prop] === '')) 
    ) { 

     if ((prop === 'loadChildren') 
      && !((typeof routeConfig[prop] === 'string')) 
     ) { 
      route[prop] =() => routeConfig[prop]; 
     } else if (prop === 'addChildrenCallback') { 
      route['children'] = routeConfig[prop]().build(); 
     } else { 
      route[prop] = routeConfig[prop]; 
     } 
     } 
    } 

    return route; 
    } 

} 

Und in meinem Routing-Modul Erklärungen:

export function appRoutes() { 
    return new RouteBuilder() 
    // always first 
    .add({ 
     path: '', 
     redirectTo: 'dashboard', 
     pathMatch: 'full' 
    }) 

    .add({ 
     path: '', 
     loadChildren: AuthModule 
    }) 

    .add({ 
     path: '', 
     loadChildren: FeaturesModule, 
     canActivate: [AuthGuard] 
    }) 

    // always last 
    .add({ 
     path: '**', 
     component: PageNotFoundComponent 
    }) 

    .build(); 
} 


@NgModule({ 
    imports: [ 
    RouterModule.forRoot(appRoutes()) 
    ], 
    exports: [ 
    RouterModule 
    ] 
}) 
export class AppRoutingModule { } 

Wenn ich laufen ng build zurückkehrt:

error AOT

Meine Deklarationen sind in anderen Modulen gleich, aber nur in app-routing.module.ts und au th-routing.module.ts ist es passiert. Wenn ich meine Instanz von RouteConfigBuilder entferne, funktioniert es einwandfrei.

Ich habe versucht, auf verschiedene Arten zu modifizieren, wie ich meinen RouteConfigBuilder instanziiere, und bis jetzt hilft mir nichts.

Wie mache ich mein Objekt in Routen instanziieren und AOT nicht wieder Fehler angezeigt?

Vielen Dank.

*** Hinzufügen Implementierung routen config.type.ts

import { Type } from '@angular/core'; 


interface IRouteInfo { 
    title: string; 
    withoutNavigate?: boolean; 
} 

interface IRouteData { 
    info: IRouteInfo; 
} 

export interface IRouteConfig { 
    path: string; 
    component?: Type<any>; 
    loadChildren?: Type<any>; 
    data?: IRouteData; 
    addChildrenCallback?: Function; 
    redirectTo?: string; 
    pathMatch?: string; 
    canActivate?: any[]; 
} 

export interface IRouteConfigBuilder { 
    path: string; 
    component?: Type<any>; 
    loadChildren?: any; 
    title?: string; 
    withoutNavigate?: boolean; 
    addChildrenCallback?: Function; 
    redirectTo?: string; 
    pathMatch?: string; 
    canActivate?: any[]; 
} 

export class RouteConfigBuilder { 
    private routeConfigBuilder: IRouteConfigBuilder; 

    public static get(routeConfigBuilder: IRouteConfigBuilder) { 
    return new RouteConfigBuilder(routeConfigBuilder); 
    } 

    constructor(routeConfigBuilder: IRouteConfigBuilder) { 
    this.routeConfigBuilder = routeConfigBuilder; 
    } 

    public build(): IRouteConfig { 
    const routeConfig: IRouteConfig = { 
     path: this.routeConfigBuilder.path, 
     component: this.routeConfigBuilder.component, 
     loadChildren: this.routeConfigBuilder.loadChildren, 
     addChildrenCallback: this.routeConfigBuilder.addChildrenCallback, 
     redirectTo: this.routeConfigBuilder.redirectTo, 
     pathMatch: this.routeConfigBuilder.pathMatch, 
     canActivate: this.routeConfigBuilder.canActivate 
    }; 

    if (this.canBuildData()) { 
     routeConfig.data = { 
     info: { 
      title: this.routeConfigBuilder.title, 
      withoutNavigate: this.routeConfigBuilder.withoutNavigate 
     } 
     }; 
    } 

    return routeConfig; 
    } 

    private canBuildData(): boolean { 
    return (this.routeConfigBuilder.title || this.routeConfigBuilder.withoutNavigate) ? true : false; 
    } 
} 
+0

Können Sie die Implementierung von 'RouteConfigBuilder' hinzufügen und wie injizieren Sie es? –

+0

@MadhuRanjan Die Implementierung von RouteConfigBuilder wurde hinzugefügt. –

+0

fügen Sie den Provider für 'IRouteConfigBuilder' hinzu? –

Antwort

0

Nicht sicher, wie Ihr Modul aussieht, wo Sie Anbieter für RouteConfigBuilder und IRouteConfigBuilder,

Im Folgenden sind die Registrierung ist die Umsetzung der sollte Arbeit,

... 
export class SomeModule{ 

.... 

    static forRoot(routeConfig): ModuleWithProviders { 
     return { 
      ngModule: SomeModule, 
      providers: [ 
       { provide: IRouteConfigBuilder, useValue: routeConfig }, 
       RouteConfigBuilder 
      ], 
     }; 
    } 

..... 

} 

Hoffe, dass dies hilft !!

Verwandte Themen