1
1
/** @module ng1 */ /** */
2
2
import { State } from "../../state/stateObject" ;
3
- import { pick , forEach , anyTrueR , unnestR } from "../../common/common" ;
3
+ import { pick , forEach , anyTrueR , unnestR , tail } from "../../common/common" ;
4
4
import { kebobString } from "../../common/strings" ;
5
5
import { ViewConfig } from "../../view/interface" ;
6
6
import { Ng1ViewDeclaration } from "../interface" ;
7
7
import { ViewService } from "../../view/view" ;
8
- import { isInjectable , isDefined , isString , isObject } from "../../common/predicates" ;
8
+ import { isArray , isInjectable , isDefined , isString , isObject } from "../../common/predicates" ;
9
9
import { services } from "../../common/coreservices" ;
10
10
import { trace } from "../../common/trace" ;
11
11
import { PathNode } from "../../path/node" ;
12
12
import { TemplateFactory } from "../templateFactory" ;
13
13
import { ResolveContext } from "../../resolve/resolveContext" ;
14
+ import { Resolvable } from "../../resolve/resolvable" ;
14
15
15
16
export const ng1ViewConfigFactory = ( node , view ) => new Ng1ViewConfig ( node , view ) ;
16
17
@@ -111,11 +112,11 @@ export class Ng1ViewConfig implements ViewConfig {
111
112
if ( ! this . hasTemplate ( ) )
112
113
throw new Error ( `No template configuration specified for '${ this . viewDecl . $uiViewName } @${ this . viewDecl . $uiViewContextAnchor } '` ) ;
113
114
114
- let injector = this . node . resolveContext ;
115
+ let context = this . node . resolveContext ;
115
116
let params = this . node . paramValues ;
116
117
let promises : any = {
117
- template : $q . when ( this . getTemplate ( params , new TemplateFactory ( ) , injector ) ) ,
118
- controller : $q . when ( this . getController ( injector ) )
118
+ template : $q . when ( this . getTemplate ( params , new TemplateFactory ( ) , context ) ) ,
119
+ controller : $q . when ( this . getController ( context ) )
119
120
} ;
120
121
121
122
return $q . all ( promises ) . then ( ( results ) => {
@@ -134,18 +135,21 @@ export class Ng1ViewConfig implements ViewConfig {
134
135
return ! ! ( this . viewDecl . template || this . viewDecl . templateUrl || this . viewDecl . templateProvider ) ;
135
136
}
136
137
137
- getTemplate ( params , $factory , injector : ResolveContext ) {
138
- return $factory . fromConfig ( this . viewDecl , params , injector . invokeLater . bind ( injector ) ) ;
138
+ getTemplate ( params , $factory , context : ResolveContext ) {
139
+ return $factory . fromConfig ( this . viewDecl , params , context ) ;
139
140
}
140
141
141
142
/**
142
143
* Gets the controller for a view configuration.
143
144
*
144
145
* @returns {Function|Promise.<Function> } Returns a controller, or a promise that resolves to a controller.
145
146
*/
146
- getController ( injector : ResolveContext ) {
147
- //* @param {Object } locals A context object from transition.context() to invoke a function in the correct context
147
+ getController ( context : ResolveContext ) : ( String | Function | Promise < Function | String > ) {
148
148
let provider = this . viewDecl . controllerProvider ;
149
- return isInjectable ( provider ) ? injector . invokeLater ( provider , { } ) : this . viewDecl . controller ;
149
+ if ( ! isInjectable ( provider ) ) return this . viewDecl . controller ;
150
+ let deps = services . $injector . annotate ( provider ) ;
151
+ let providerFn = isArray ( provider ) ? tail ( < any > provider ) : provider ;
152
+ let resolvable = new Resolvable ( "" , < any > providerFn , deps ) ;
153
+ return resolvable . get ( context ) ;
150
154
}
151
155
}
0 commit comments