@@ -3,15 +3,15 @@ import {NgModule, NgModuleMetadataType, OpaqueToken} from "@angular/core";
3
3
import { UIROUTER_DIRECTIVES } from "./directives/directives" ;
4
4
import { UIROUTER_PROVIDERS } from "./providers" ;
5
5
import { UIView } from "./directives/uiView" ;
6
- import { uniqR } from "../common/common" ;
6
+ import { uniqR , flattenR } from "../common/common" ;
7
7
8
8
@NgModule ( {
9
9
declarations : [ UIROUTER_DIRECTIVES ] ,
10
10
exports : [ UIROUTER_DIRECTIVES ] ,
11
11
entryComponents : [ UIView ] ,
12
12
providers : [ UIROUTER_PROVIDERS ]
13
13
} )
14
- export class _UIRouterModule { }
14
+ export class UIRouterRootModule { }
15
15
16
16
/**
17
17
* A module declaration lteral, including UI-Router states.
@@ -23,7 +23,7 @@ export interface UIRouterModuleMetadata extends NgModuleMetadataType {
23
23
states ?: Ng2StateDeclaration [ ]
24
24
}
25
25
26
- export const UIROUTER_STATES_TOKEN = new OpaqueToken ( "UIRouterStates " ) ;
26
+ export const UIROUTER_STATES_TOKEN = new OpaqueToken ( "UIRouter States " ) ;
27
27
28
28
/**
29
29
* Declares a NgModule with UI-Router states
@@ -51,17 +51,19 @@ export const UIROUTER_STATES_TOKEN = new OpaqueToken("UIRouterStates");
51
51
*/
52
52
export function UIRouterModule ( moduleMetaData : UIRouterModuleMetadata ) {
53
53
let states = moduleMetaData . states || [ ] ;
54
+ var statesProvider = { provide : UIROUTER_STATES_TOKEN , useValue : states , multi : true } ;
54
55
55
56
// 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 } )
57
59
. map ( viewObj => Object . keys ( viewObj ) . map ( key => viewObj [ key ] . component ) )
58
60
. reduce ( ( acc , arr ) => acc . concat ( arr ) , [ ] )
59
61
. filter ( x => typeof x === 'function' && x !== UIView ) ;
60
62
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 ) ;
65
67
66
68
return function ( moduleClass ) {
67
69
return NgModule ( moduleMetaData ) ( moduleClass ) ;
0 commit comments