Skip to content

Commit 421bca7

Browse files
BC-BREAK: Don't pass Injector as second arg to Trans Hooks.
1 parent 52f1308 commit 421bca7

18 files changed

+122
-174
lines changed

package.json

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,21 @@
33
"description": "State-based routing for Javascript",
44
"version": "1.0.0-alpha.5",
55
"scripts": {
6-
"test": "npm run test:core && npm run test:ng1",
7-
"test:watch": "node_modules/watch/cli.js 'npm run test' src test",
6+
"test": "npm run test:integrate",
7+
"watch": "node_modules/watch/cli.js 'npm run test' src test",
88

99
"test:core": "karma start config/karma.core.js",
10-
"test:core:debug": "karma start config/karma.core.js --singleRun=false --browsers=Chrome --autoWatch=true --autoWatchInterval=1",
10+
"debug:core": "karma start config/karma.core.js --singleRun=false --browsers=Chrome --autoWatch=true --autoWatchInterval=1",
1111

1212
"test:ng1": "karma start config/karma.ng15.js",
13-
"test:ng1:debug": "karma start config/karma.ng15.js --singleRun=false --browsers=Chrome --autoWatch=true --autoWatchInterval=1",
14-
"test:ng1:watch": "node_modules/watch/cli.js 'npm run test:ng1' src test",
13+
"debug:ng1": "karma start config/karma.ng15.js --singleRun=false --browsers=Chrome --autoWatch=true --autoWatchInterval=1",
14+
"watch:ng1": "node_modules/watch/cli.js 'npm run test:ng1' src test",
1515

1616
"test:ng12": "karma start config/karma.ng12.js",
1717
"test:ng13": "karma start config/karma.ng13.js",
1818
"test:ng14": "karma start config/karma.ng14.js",
1919
"test:ng15": "karma start config/karma.ng15.js",
20+
2021
"test:integrate": "tsc && npm run test:core && npm run test:ng12 && npm run test:ng13 && npm run test:ng14 && npm run test:ng15"
2122
},
2223
"homepage": "http://angular-ui.github.com/ui-router",

src/hooks/onEnterExitRetain.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
/** @module state */ /** for typedoc */
22
import {TransitionStateHookFn} from "../transition/interface";
3-
import {UiInjector} from "../common/interface";
43
import {State} from "../state/stateObject";
54
import {Transition} from "../transition/transition";
65

76
export function makeEnterExitRetainHook(hookName: string): TransitionStateHookFn {
8-
return (transition: Transition, injector: UiInjector, state: State) =>
9-
state[hookName](transition, injector, state);
7+
return (transition: Transition, state: State) =>
8+
state[hookName](transition, state);
109
}

src/hooks/redirectTo.ts

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import {isString, isFunction} from "../common/predicates"
2-
import {UiInjector} from "../common/interface";
32
import {Transition} from "../transition/transition";
4-
import {UiRouter} from "../router";
53
import {services} from "../common/coreservices";
64
import {TargetState} from "../state/targetState";
75

@@ -10,22 +8,21 @@ import {TargetState} from "../state/targetState";
108
*
119
* See [[StateDeclaration.redirectTo]]
1210
*/
13-
export const redirectToHook = (transition: Transition, $injector: UiInjector) => {
14-
let redirect = transition.to().redirectTo;
11+
export const redirectToHook = (trans: Transition) => {
12+
let redirect = trans.to().redirectTo;
1513
if (!redirect) return;
1614

17-
let router: UiRouter = $injector.get(UiRouter);
18-
let $state = router.stateService;
19-
20-
if (isFunction(redirect))
21-
return services.$q.when(redirect(transition, $injector)).then(handleResult);
22-
23-
return handleResult(redirect);
24-
2515
function handleResult(result) {
16+
let $state = trans.router.stateService;
17+
2618
if (result instanceof TargetState) return result;
27-
if (isString(result)) return $state.target(<any> result, transition.params(), transition.options());
19+
if (isString(result)) return $state.target(<any> result, trans.params(), trans.options());
2820
if (result['state'] || result['params'])
29-
return $state.target(result['state'] || transition.to(), result['params'] || transition.params(), transition.options());
21+
return $state.target(result['state'] || trans.to(), result['params'] || trans.params(), trans.options());
22+
}
23+
24+
if (isFunction(redirect)) {
25+
return services.$q.when(redirect(trans)).then(handleResult);
3026
}
27+
return handleResult(redirect);
3128
};

src/hooks/resolve.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,14 @@ import {ResolveContext} from "../resolve/resolveContext";
66

77
/** A function which resolves all EAGER Resolvables in the To Path */
88
export const $eagerResolvePath = (trans: Transition) =>
9-
new ResolveContext(trans.treeChanges().to).resolvePath("EAGER", trans).then(noop);
9+
new ResolveContext(trans.treeChanges().to)
10+
.resolvePath("EAGER", trans)
11+
.then(noop);
1012

1113
/** A function which resolves all LAZY Resolvables for the state (and all ancestors) in the To Path */
12-
export const $lazyResolveState = (trans: Transition, injector, state: State) =>
13-
new ResolveContext(trans.treeChanges().to).subContext(state).resolvePath("LAZY", trans).then(noop);
14+
export const $lazyResolveState = (trans: Transition, state: State) =>
15+
new ResolveContext(trans.treeChanges().to)
16+
.subContext(state)
17+
.resolvePath("LAZY", trans)
18+
.then(noop);
1419

src/hooks/url.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@ import {Transition} from "../transition/transition";
44
import {UiInjector} from "../common/interface";
55
import {UiRouter} from "../router";
66

7-
export function updateUrl(transition: Transition, injector: UiInjector) {
7+
export function updateUrl(transition: Transition) {
88
let options = transition.options();
9-
var router: UiRouter = injector.get(UiRouter);
10-
let $state: StateService = router.stateService;
11-
let $urlRouter: UrlRouter = router.urlRouter;
9+
let $state: StateService = transition.router.stateService;
10+
let $urlRouter: UrlRouter = transition.router.urlRouter;
1211

1312
if (options.location && $state.$current.navigable) {
1413
var urlOptions = {replace: options.location === 'replace'};

src/hooks/views.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ import {services} from "../common/coreservices";
44
import {Transition} from "../transition/transition";
55
import {ViewService} from "../view/view";
66
import {ViewConfig} from "../view/interface";
7-
import {TransitionService} from "../transition/transitionService";
8-
import {UiInjector} from "../common/interface";
9-
import {UiRouter} from "../router";
107

118

129
/** Allows the views to do async work [.load()] before the transition continues */
@@ -16,12 +13,12 @@ export function loadEnteringViews(transition) {
1613
return services.$q.all(enteringViews.map(view => view.load())).then(noop);
1714
}
1815

19-
export function activateViews(transition: Transition, injector: UiInjector) {
16+
export function activateViews(transition: Transition) {
2017
let enteringViews = transition.views("entering");
2118
let exitingViews = transition.views("exiting");
2219
if (!enteringViews.length && !exitingViews.length) return;
2320

24-
let $view: ViewService = injector.get(UiRouter).viewService;
21+
let $view: ViewService = transition.router.viewService;
2522

2623
exitingViews.forEach((vc: ViewConfig) => $view.deactivateViewConfig(vc));
2724
enteringViews.forEach((vc: ViewConfig) => $view.activateViewConfig(vc));

src/ng1/legacy/stateEvents.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,11 @@ var $stateNotFound;
153153
return memo;
154154
}
155155

156-
function stateChangeStartHandler($transition$: Transition, $injector) {
156+
function stateChangeStartHandler($transition$: Transition) {
157157
if (!$transition$.options().notify || !$transition$.valid() || $transition$.ignored())
158158
return;
159159

160+
let $injector = $transition$.injector().native;
160161
let $stateEvents = $injector.get('$stateEvents');
161162
let $rootScope = $injector.get('$rootScope');
162163
let $state = $injector.get('$state');

src/ng1/services.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,21 @@
1313
import {UiRouter} from "../router";
1414
import {services} from "../common/coreservices";
1515
import {bindFunctions, removeFrom, applyPairs} from "../common/common";
16-
import {prop, propEq} from "../common/hof";
16+
import {prop} from "../common/hof";
1717
import {isObject, isString} from "../common/predicates";
18-
import {PathNode} from "../path/node";
1918
import {resolveFactory} from "./legacy/resolveService";
2019
import {trace} from "../common/trace";
21-
import {ng1ViewsBuilder, ng1ViewConfigFactory, Ng1ViewConfig} from "./statebuilders/views";
20+
import {ng1ViewsBuilder, ng1ViewConfigFactory} from "./statebuilders/views";
2221
import {TemplateFactory} from "./templateFactory";
2322
import {StateParams} from "../params/stateParams";
2423
import {TransitionService} from "../transition/transitionService";
2524
import {StateService} from "../state/stateService";
2625
import {StateProvider} from "../state/state";
2726
import {UrlRouterProvider, UrlRouter} from "../url/urlRouter";
2827
import {UrlMatcherFactory} from "../url/urlMatcherFactory";
29-
import {Transition} from "../transition/transition";
3028
import {getStateHookBuilder} from "./statebuilders/onEnterExitRetain";
3129
import {ResolveContext} from "../resolve/resolveContext";
30+
import IInjectorService = angular.auto.IInjectorService;
3231

3332
/** @hidden */
3433
let app = angular.module("ui.router.angular1", []);
@@ -284,6 +283,12 @@ export const getLocals = (ctx: ResolveContext) => {
284283
return tuples.reduce(applyPairs, {});
285284
};
286285

286+
declare module "../common/interface" {
287+
interface UiInjector {
288+
native: IInjectorService;
289+
}
290+
}
291+
287292
/** Injectable services */
288293

289294
/**

src/ng1/statebuilders/onEnterExitRetain.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {extend} from "../../common/common";
1818
export const getStateHookBuilder = (hookName) =>
1919
function stateHookBuilder(state: State, parentFn): TransitionStateHookFn {
2020
let hook = state[hookName];
21-
function decoratedNg1Hook(trans: Transition, inj: IInjectorService, state): HookResult {
21+
function decoratedNg1Hook(trans: Transition, state): HookResult {
2222
let resolveContext = new ResolveContext(trans.treeChanges().to);
2323
return services.$injector.invoke(hook, this, extend({ $state$: state }, getLocals(resolveContext)));
2424
}

src/resolve/resolveContext.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,4 +186,7 @@ class UiInjectorImpl implements UiInjector {
186186
if (resolvable) return resolvable.get(this.context);
187187
return services.$q.when(services.$injector.get(token));
188188
}
189+
190+
/** The native injector ($injector on ng1, Root Injector on ng2, justjs injector for everything else) */
191+
native = services.$injector;
189192
}

0 commit comments

Comments
 (0)