@@ -3,15 +3,15 @@ import {NgModule, NgModuleMetadataType, OpaqueToken} from "@angular/core";
33import { UIROUTER_DIRECTIVES } from "./directives/directives" ;
44import { UIROUTER_PROVIDERS } from "./providers" ;
55import { UIView } from "./directives/uiView" ;
6- import { uniqR } from "../common/common" ;
6+ import { uniqR , flattenR } from "../common/common" ;
77
88@NgModule ( {
99 declarations : [ UIROUTER_DIRECTIVES ] ,
1010 exports : [ UIROUTER_DIRECTIVES ] ,
1111 entryComponents : [ UIView ] ,
1212 providers : [ UIROUTER_PROVIDERS ]
1313} )
14- export class _UIRouterModule { }
14+ export class UIRouterRootModule { }
1515
1616/**
1717 * A module declaration lteral, including UI-Router states.
@@ -23,7 +23,7 @@ export interface UIRouterModuleMetadata extends NgModuleMetadataType {
2323 states ?: Ng2StateDeclaration [ ]
2424}
2525
26- export const UIROUTER_STATES_TOKEN = new OpaqueToken ( "UIRouterStates " ) ;
26+ export const UIROUTER_STATES_TOKEN = new OpaqueToken ( "UIRouter States " ) ;
2727
2828/**
2929 * Declares a NgModule with UI-Router states
@@ -51,17 +51,19 @@ export const UIROUTER_STATES_TOKEN = new OpaqueToken("UIRouterStates");
5151 */
5252export function UIRouterModule ( moduleMetaData : UIRouterModuleMetadata ) {
5353 let states = moduleMetaData . states || [ ] ;
54+ var statesProvider = { provide : UIROUTER_STATES_TOKEN , useValue : states , multi : true } ;
5455
5556 // Get the component classes for all views for all states in the module
56- let components = states . map ( state => state . views || { $default : state } )
57+ let routedComponents = states . reduce ( flattenR , [ ] )
58+ . map ( state => state . views || { $default : state } )
5759 . map ( viewObj => Object . keys ( viewObj ) . map ( key => viewObj [ key ] . component ) )
5860 . reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] )
5961 . filter ( x => typeof x === 'function' && x !== UIView ) ;
6062
61- moduleMetaData . imports = < any [ ] > ( moduleMetaData . imports || [ ] ) . concat ( _UIRouterModule ) . reduce ( uniqR , [ ] ) ;
62- moduleMetaData . declarations = < any [ ] > ( moduleMetaData . declarations || [ ] ) . concat ( components ) . reduce ( uniqR , [ ] ) ;
63- moduleMetaData . entryComponents = < any [ ] > ( moduleMetaData . entryComponents || [ ] ) . concat ( components ) . reduce ( uniqR , [ ] ) ;
64- moduleMetaData . providers = ( moduleMetaData . providers || [ ] ) . concat ( { provide : UIROUTER_STATES_TOKEN , useValue : states } ) ;
63+ moduleMetaData . imports = < any [ ] > ( moduleMetaData . imports || [ ] ) . concat ( UIRouterRootModule ) . reduce ( uniqR , [ ] ) ;
64+ moduleMetaData . declarations = < any [ ] > ( moduleMetaData . declarations || [ ] ) . concat ( routedComponents ) . reduce ( uniqR , [ ] ) ;
65+ moduleMetaData . entryComponents = < any [ ] > ( moduleMetaData . entryComponents || [ ] ) . concat ( routedComponents ) . reduce ( uniqR , [ ] ) ;
66+ moduleMetaData . providers = ( moduleMetaData . providers || [ ] ) . concat ( statesProvider ) ;
6567
6668 return function ( moduleClass ) {
6769 return NgModule ( moduleMetaData ) ( moduleClass ) ;
0 commit comments