11/** @module ng1 */ /** */
22import { State } from "../../state/stateObject" ;
3- import { pick , forEach , anyTrueR , unnestR } from "../../common/common" ;
3+ import { pick , forEach , anyTrueR , unnestR , tail } from "../../common/common" ;
44import { kebobString } from "../../common/strings" ;
55import { ViewConfig } from "../../view/interface" ;
66import { Ng1ViewDeclaration } from "../interface" ;
77import { ViewService } from "../../view/view" ;
8- import { isInjectable , isDefined , isString , isObject } from "../../common/predicates" ;
8+ import { isArray , isInjectable , isDefined , isString , isObject } from "../../common/predicates" ;
99import { services } from "../../common/coreservices" ;
1010import { trace } from "../../common/trace" ;
1111import { PathNode } from "../../path/node" ;
1212import { TemplateFactory } from "../templateFactory" ;
1313import { ResolveContext } from "../../resolve/resolveContext" ;
14+ import { Resolvable } from "../../resolve/resolvable" ;
1415
1516export const ng1ViewConfigFactory = ( node , view ) => new Ng1ViewConfig ( node , view ) ;
1617
@@ -111,11 +112,11 @@ export class Ng1ViewConfig implements ViewConfig {
111112 if ( ! this . hasTemplate ( ) )
112113 throw new Error ( `No template configuration specified for '${ this . viewDecl . $uiViewName } @${ this . viewDecl . $uiViewContextAnchor } '` ) ;
113114
114- let injector = this . node . resolveContext ;
115+ let context = this . node . resolveContext ;
115116 let params = this . node . paramValues ;
116117 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 ) )
119120 } ;
120121
121122 return $q . all ( promises ) . then ( ( results ) => {
@@ -134,18 +135,21 @@ export class Ng1ViewConfig implements ViewConfig {
134135 return ! ! ( this . viewDecl . template || this . viewDecl . templateUrl || this . viewDecl . templateProvider ) ;
135136 }
136137
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 ) ;
139140 }
140141
141142 /**
142143 * Gets the controller for a view configuration.
143144 *
144145 * @returns {Function|Promise.<Function> } Returns a controller, or a promise that resolves to a controller.
145146 */
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 > ) {
148148 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 ) ;
150154 }
151155}
0 commit comments