From 70c6659bf13f9f0e7a92be33927c3b976dc2d5b1 Mon Sep 17 00:00:00 2001 From: Wesley Cho Date: Mon, 28 Dec 2015 22:45:46 -0500 Subject: [PATCH] feat(resolve): add $resolve service - Add `$resolve` service for exposing helper as an injectable --- src/common/common.ts | 2 +- src/ng1/angular1.ts | 30 +++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/common/common.ts b/src/common/common.ts index 9ac649a8d..a705855b6 100644 --- a/src/common/common.ts +++ b/src/common/common.ts @@ -411,7 +411,7 @@ export function tail(collection: any[]): any { * in your angular app (use {@link ui.router} module instead). * */ -angular.module('ui.router.util', ['ng', 'ui.router.init']); +angular.module('ui.router.util', ['ng', 'ui.router.init', 'ui.router.resolve']); /** * @ngdoc overview diff --git a/src/ng1/angular1.ts b/src/ng1/angular1.ts index 54cf168a8..484a2d92a 100644 --- a/src/ng1/angular1.ts +++ b/src/ng1/angular1.ts @@ -14,7 +14,12 @@ import {IQService} from "angular"; import {Router} from "../router"; import {services} from "../common/coreservices"; -import {isObject} from "../common/common"; +import {forEach, isObject} from "../common/common"; +import {RawParams} from "../params/interface"; +import {Node} from "../path/module"; +import {Resolvables} from "../resolve/interface"; +import {Resolvable, ResolveContext} from "../resolve/module"; +import {State} from "../state/module"; let app = angular.module("ui.router.angular1", []); @@ -80,21 +85,40 @@ function ng1UIRouter($locationProvider) { }; bindFunctions(["replace", "url", "path", "search", "hash"], $location, services.location); - bindFunctions([ 'port', 'protocol', 'host'], $location, services.locationConfig); + bindFunctions(['port', 'protocol', 'host'], $location, services.locationConfig); bindFunctions(['baseHref'], $browser, services.locationConfig); return router; } } +function resolveFactory() { + return { + resolve: (invocables, locals, parent, self) => { + let state = new State({ params: {} }); + let node = new Node(state, {}); + let context = new ResolveContext([node]); + let resolvables: Resolvables = {}; + forEach(invocables, (invocable, key) => { + resolvables[key] = new Resolvable(`${key}`, invocable); + }); + + context.addResolvables(resolvables, node.state); + + return context.resolvePath(); + } + }; +} + angular.module('ui.router.init', []).provider("ng1UIRouter", ng1UIRouter); // Register as a provider so it's available to other providers angular.module('ui.router.util').provider('$urlMatcherFactory', ['ng1UIRouterProvider', () => router.urlMatcherFactory]); angular.module('ui.router.router').provider('$urlRouter', ['ng1UIRouterProvider', () => router.urlRouterProvider]); angular.module('ui.router.state').provider('$state', ['ng1UIRouterProvider', () => router.stateProvider]); +angular.module('ui.router.resolve', []).factory('$resolve', resolveFactory); /* This effectively calls $get() to init when we enter runtime */ angular.module('ui.router.init').run(['ng1UIRouter', function(ng1UIRouter) { }]); +angular.module('ui.router.resolve').run(['$resolve', function(resolve) { }]); angular.module('ui.router.state').run(['$state', function($state) { }]); angular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]); -