1.0.0-rc.1 (2017-01-09)
- Post-process .d.ts files to make them compatible with TS 1.8 (c8162ee), closes #3070
- $stateChangeSuccess: fire polyfill
$stateChangeSuccess
right after global state are updated (3984f9b), closes #3144 - $viewContentLoading: Add $viewContentLoading event back (c346a28)
- build: Use global
angular
reference if require('angular') is falsey or empty (2982613), closes #3113 - component: Do not throw err when component has
&
binding (b5c731d), closes #3099 - Ng1ViewDeclaration: Make controllerProvider IInjectable (#3056) (a3136ae), closes #3044
- ng2.uiSrefActive: Allow ng-if on nested uiSrefs (e3051f5), closes #3046
- onExit: inject resolve values using the "from path" (c91b65a)
- onExit: inject the current transition as
$transition$
(c91b65a), closes #3081 - package: use engines: node: >=4.0.0 (6801b0c), closes #3086
- Resolve: Fix NOWAIT resolve injection into controllers and bindings to components. (cb57ce9)
- typings: Change Ng1ViewDeclaration.controller type to IInjectable|string (d2b5d84), closes #3089
- typings: Change Ng1ViewDeclaration.controller type to IInjectable|string (8e91dc9)
- ui-sref: Update
ui-sref/state
href when states are added/removed (389dfd5) - ui-sref: Update params-only sref when state changes (3c1bd0e), closes #1031 #2541
- ui-sref: Use either .on or .bind for click handlers (b00f044), closes #3035
- ui-sref-active: Add CSS class immediately (avoid delay) (27eb5e9), closes #2503
- ui-sref-active: Avoid add/remove class race condition (126a4ad)
- ui-sref-active: Use
$scope.$evalAsync
to apply css class (6a9d9ae), closes #2503 #1997 #2503 #1997 - ui-state: Process ui-state links relative to where they are created (cae4dc4)
- ui-state: Support one time bindings in ng 1.3 (389dfd5), closes #3131 #3054
- uiView: do not leave initial view scope undestroyed (#3164) (37d6f9a), closes #1896
- bundle using rollupjs for smaller bundle and faster init times (a4b5500)
- Deprecate public use of
$urlRouter
and$urlMatcherFactory
in favor of$urlService
(6ee7f21) - Move imperative
$resolve
service out of main bundle (cae6d03) - remove component.json (af736c4)
- Use angular 1.3+
$templateRequest
service to fetch templates (7e1f36e), closes #3193 #1882 - $uiRouter: expose router instance at config-time as
$uiRouterProvider.router
(9d2661c) - injectables: Expose
$uiRouterProvider
,$uiRouterGlobals
, and$stateRegistry
injectables (7fa72a6) - ui-sref-active: improve performance by reducing $watches (126a4ad)
- ui-view: Route-to-component: Wire component "&" bindings (af95206), closes #3239 #3111
- UrlService: Create UrlService API (facade) for easier access to URL based APIs (6ee7f21)
- view: A view without anything to render defaults to
<ui-view></ui-view>
(7d28fdd), closes #3178 - view: Route a view to a directive using
componentProvider
(#3165) (090d2e3)
The UrlService
combines the commonly used URL APIs in a single place.
The service may be injected in a run block as $urlService
, or in a config block as $urlServiceProvider
.
The service object has two nested API objects, rules
and config
. An example usage is $urlService.rules.otherwise('/home')
The existing API for $urlRouter
and $urlMatcherFactory
will continue to function as before, but are now considered an "internal API".
The new $urlService
is a facade which delegates to the appropriate internal APIs.
We now fetch templates using $templateRequest
when it is available (angular 1.3+).
You can revert to previous template fetching behavior using $http
by configuring the ui-router $templateFactoryProvider
.
.config(function($templateFactoryProvider) {
$templateFactoryProvider.shouldUnsafelyUseHttp(true);
});
There are security ramifications to using $http
to fetch templates.
Read
Impact on loading templates
for more details
The $resolve
service's .resolve()
method can be used to perform async dependency injection imperatively.
The code has been moved out of the main angular-ui-router codebase and is now opt-in.
For prebuilt bundle users, add release/legacy/resolveService.js
to your project.
For self-bundlers (e.g., webpack), add angular-ui-router/lib/legacy/resolveService
as an import
or require()
.
It's unlikely you use this service.
Its most common usage is with the UI-Bootstrap $modal
service.
This release of angular-ui-router (1.0.0-rc.1) updates ui-router-core to 3.1.0 These are the changes in ui-router-core from 1.0.0-beta.3 to 3.1.0
3.1.0 (2017-01-09)
- lazyLoad: Sync by URL after nested lazy load triggered by URL (1c6220c)
- lazyLoad: Use UrlService.match() to retry url sync after successful lazy load triggered by url (8c2461d), closes #19
- Ng1ViewDeclaration: Make controllerProvider IInjectable (#3056) (a3136ae), closes #3044
- ng2.uiSrefActive: Allow ng-if on nested uiSrefs (e3051f5), closes #3046
- onBefore: Skip remaining hooks after the (#2) (8a45d04)
- param:
params: { foo: { raw: true } }
overridesParamType.raw
(aefeabf) - Param: Mark all query parameters as optional (7334d98)
- params: Check for null in
int
param typeis()
check (aa551e4), closes #3197 - redirect: Do not allow
onBefore
hooks to cause infinite redirect loops (5c5f7eb), closes #6 - redirectTo: Do not puke when redirectTo returns undefined (bde9c0f)
- redirectTo: fix TS type signature of
redirectTo
(2c059c4) - StateQueueManager: Compare parsed url parameters using typed parameters (beca1f5)
- StateRegistry: Fix error message: State '' is already defined (f5bd96b)
- StateService: Compare typed parameters in .is() and .includes() (b1a5155)
- TargetState: Narrow
name()
return type toString
(a02f4a7) - Transition: Use { location: replace } when redirecting a transtition in response to a URL sync (23e2b78)
- typescript: Emit TS 1.8 compatible .d.ts files (65badf4)
- typings: Allow urlRouter.rule to return void (0b78bdf)
- ui-sref: Use either .on or .bind for click handlers (b00f044), closes #3035
- UrlRouter: Use { location: 'replace' } whenever a url redirect happens (6cf9b8f)
- UrlService: Wire urlMatcherFactory and urlRouter functions (a7b58d6)
- vanilla: vanilla locations: do not parse "empty string" query key parameter (f949480)
- view: Load view prerequisites in
onFinish
(cc85e76) - view.load: Allow view.load to return synchronously (8619cf9)
- (CoreServices) Move
location
andlocationConfig
fromservices
toUIRouter.locationService
andUIRouter.locationConfig
. (029fb00) - Built-in
string
parameter type no longer encodes slashes as~2F
nor tildes as~~
(72bb2d8) - Create router.dispose() to dispose a router instance and resources. (0690917)
- Hook errors are all normalized to a "Rejection" type. To access the detail of the error thrown (
throw "Error 123"
), use.detail
, i.e.: (f486ced) - Move
html5Mode
andhashPrefix
fromLocationServices
toLocationConfig
interface (9d316a7) - move
ViewService.viewConfigFactory
androotContext
to_pluginapi.*
(65badf4) - Move html5Mode and hashPrefix to LocationServices from LocationConfig (f7ac2bb)
- Order URL Matching Rules by priority, not registration order (eb2f5d7)
- Path/Query parameters no longer default to
string
param type (72bb2d8) - Previously, a state with a
lazyLoad
function was considered a future state. (ec50da4) - Remove
getResolveValue
andgetResolvable
methods fromTransition
in favor ofinjector().get()
andinjector().getAsync()
(111d259) - Replace
LocationServices.setUrl
withLocationServices.url
(4c39dcb) - Replace UrlRouterProvider/UrlRouter with just UrlRouter (fddd1e2)
- assertMap: Add a [].map() helper that asserts that each element is truthy (f044f53)
- futureState: States with a
.**
name suffix (i.e.,foo.**
) are considered future states (ec50da4) - hash: Change the hash parameter type (
'#'
) toinherit: false
so it is cleared out when another transition occurs. (849f84f), closes #3245 #3218 #3017 - HookBuilder: Allow custom hook types (to be defined by a plugin) (3f146e6)
- lazyLoad: Created
StateService.lazyLoad
method to imperatively lazy load a state (ec50da4), closes #8 - lazyLoad: Exported/exposed the
lazyLoadState
function (ec50da4) - lazyLoad: the
lazyLoad
hook can be used to lazy load anything (component code, etc) (ec50da4), closes #4 - LocationServices: Add a
parts()
method which returns the URL parts as an object (32e64f0) - onCreate: Add onCreate transition hook (f486ced)
- params: Add
path
andquery
param types (72bb2d8) - params: add option to use generic type for Transition.params (#17) (eb12ec8), closes #16
- Params: Allow
inherit: false
specified per parameter or type (849f84f) - plugin: Allow all plugins to be gotted. (e324973)
- plugin: Allow registration by ES6 class, JS constructor fn, JS factory fn (b9f4541)
- plugin: Create plugin API (36a5215), closes #7
- Resolve: implement NOWAIT policy: Do not wait for resolves before completing a transition. (05d4c73), closes #3243 #2691
- State: add .parameters() option for filtering to matching keys (beca1f5)
- transition: Allow plugins to define own transition events like
onEnter
(0dc2c19) - transition: Create (2673406)
- Transition: Add Transition.originalTransition() to return the initial transition in a chain of redirects (4fe39e3)
- Transition: Allow
injector()
to retrieve resolves for the exiting states/path (df502e8) - Transition: Allow a plain object
ResolvableLiteral
inTransition.addResolvable
(ad9ae81) - Transition: Make Transition.params() immutable to avoid confusion about mutability (0162212)
- Transition: Support treechange paths in API for Resolve+transition (beedc82)
- UrlMatcher: Add comparison function by UrlMatcher specificity (eb2f5d7)
- UrlRouter: sort url rules by specificity, not by registration order. (eb2f5d7)
- UrlService: allow eager or lazy binding of location objects during construction (7e0a8af)
- UrlServices: Add
match()
: given a URL, return the best matching Url Rule (32e64f0) - vanilla: Implement in-memory-only location api (f64aace)
BREAKING CHANGE: Remove getResolveValue
and getResolvable
methods from Transition
in favor of injector().get()
and injector().getAsync()
In beta.3, the Transition APIs: injector()
, getResolvable
, and getResolveValue
duplicated functionality.
Instead of:
trans.getResolveValue('myResolve');
use:
trans.injector().get('myResolve')
BREAKING CHANGE: Hook errors are all normalized to a "Rejection" type. To access the detail of the error thrown (throw "Error 123"
), use .detail
, i.e.:
$state.go('foo').catch(err => { if (err === "Error 123") .. });
$state.go('foo').catch(err => { if (err.detail === "Error 123") .. });
This makes url()
a getter/setter. It also adds the optional state
parameter to pass through to the browser history when using pushstate.
End users should not notice this change, but plugin authors may.
The configuration functions from the provider object have been integrated into the normal UrlRouter object.
The UIRouter
object no longer has a uriRouterProvider
, but the equivalent functions can be found on uiRouter
One difference between the old functions on urlRouterProvider
and the new ones on uriRouter
is that new functions do not accept injectable functions.
Previously, the string
parameter type pre-encoded tilde chars (~
) as two tilde chars (~~
) and slashes (/
) as ~2F
.
Now, the string
parameter type does not pre-encode slashes nor tildes.
If you rely on the previous encoding, create a custom parameter type that implements the behavior:
urlMatcherFactory.type('tildes', {
encode: (val: any) =>
val != null ? val.toString().replace(/(~|\/)/g, m => ({ '~': '~~', '/': '~2F' }[m])) : val;
decode: (val: string) =>
val != null ? val.toString().replace(/(~~|~2F)/g, m => ({ '~~': '~', '~2F': '/' }[m])) : val;
pattern: /[^/]*/
});
Previously, if a url parameter's type was not specified (in either the path or query), it defaulted to the string
type.
Now, path parameters default to the new path
type and query parameters default to the new query
type.
In Angular 1 only, the new path
parameter type retains the old behavior of pre-encoding ~
to ~~
and /
to ~2F
URL Rules can come from registered states' .url
s, calling .when()
, or calling .rule()
.
It's possible that two or more URL Rules could match the URL.
Previously, url rules were matched in the order in which they were registered. The rule which was registered first would handle the URL change.
Now, the URL rules are sorted according to a sort function. More specific rules are preferred over less specific rules
It's possible to have multiple url rules that match a given URL. Consider the following states:
{ name: 'books', url: '/books/index' }''
{ name: 'book', url: '/books/:bookId' }''
Both states match when the url is /books/index
.
Additionally, you might have some custom url rewrite rules such as:
.when('/books/list', '/books/index')
.
The book
state also matches when the rewrite rule is matched.
Previously, we simply used the first rule that matched. However, now that lazy loading is officially supported, it can be difficult for developers to ensure the rules are registered in the right order.
Instead, we now prioritize url rules by how specific they are. More specific rules are matched earlier than less specific rules.
We split the path on /
. A static segment (such as index
in the example) is more specific than a parameter (such as:bookId
).
The built-in rule sorting function (see UrlRouter.defaultRuleSortFn
) sorts rules in this order:
- Explicit priority:
.when('/foo', '/bar', { priority: 1 })
(default priority is 0) - Rule Type:
- UrlMatchers first (registered states and
.when(string, ...)
) - then regular Expressions (
.when(regexp, ...)
) - finally, everything else (
.rule()
)
- UrlMatchers first (registered states and
- UrlMatcher specificity: static path segments are more specific than variables (see
UrlMatcher.compare
) - Registration order (except for UrlMatcher based rules)
For complete control, a custom sort function can be registered with UrlService.rules.sort(sortFn)
Because query parameters are optional, they are not considered during sorting.
For example, both these rules will match when the url is '/foo/bar'
:
.when('/foo/bar', doSomething);
.when('/foo/bar?queryparam', doSomethingElse);
To choose the most specific rule, we match both rules, then choose the rule with the "best ratio" of matched optional parameters (see UrlRuleFactory.fromUrlMatcher
)
This allows child states to be defined with only query params for a URL. The state only activates when the query parameter is present.
.state('parent', { url: '/parent' });
.state('parent.child', { url: '?queryParam' });
For backwards compatibility, register a sort function which sorts by the registration order:
myApp.config(function ($urlServiceProvider) {
function sortByRegistrationOrder(a, b) {
return a.$id - b.$id;
}
$urlServiceProvider.rules.sort(sortByRegistrationOrder);
});
This BC happened in commit 6c42285
Now, a state whose name ends with .**
(i.e., a glob pattern which matches all children) is a future state.
Change your future states from:
{ name: 'future', url: '/future', lazyLoad: () => ... }
to:
{ name: 'future.**', url: '/future', lazyLoad: () => ... }
BREAKING CHANGE: (CoreServices) Move location
and locationConfig
from services
to UIRouter.locationService
and UIRouter.locationConfig
.
The core services
object is a mutable object which each framework was monkey patching.
This change removes the requirement to monkey patch a global mutable object.
Instead, framework implementors should pass the LocationServices
and LocationConfig
implementations into the UIRouter
constructor.
End users who were accessing services.location
or services.locationConfig
should access these off the UIRouter
instance instead.
1.0.0-beta.3 commits (2016-09-23)
This release adds Angular 2.0.0 final support.
It changes the NgModule mechanism to use UIRouterModule.forRoot()
and UIRouterModule.forChild()
.
See the blog and the breaking changes section.
This release fixes bugs for both ng1 and ng2
- common: Remove
url()
from LocationService interface (#2990) (d6c2580) - lazyLoad: Always delete the lazy load promise after it settles. (dd2f101)
- ng1.StateProvider: Export StateProvider class so type can be used (167770d)
- ng1.uiView: Remove deprecated jquery functions bind/unbind in favor of on/off (60ebd44)
- ng2: Angular 2.0.0 final compatibility (7c54b75), closes #2991
- ng2.NgModule: Allow apps with no forChild modules (d3bd332), closes #3009
- ng2.uiView: Use ReflectorReader to get component inputs
- resolve: Don't re-resolve data when redirected to same state, but only dynamic params changed. (98cd2d2), closes #3033
- trace: Show function definition during logging of trace.enable('HOOK') (190d122)
- transition: Fail a transition if a new one has started while resolves are loading (bc87d9e), closes #2972
- urlMatcherFactory: fix tilde edge case with "string" encoding (#3018) (a201906)
- viewService: Allow root ui-view to be wrapped in ng-if (32f718a), closes #3004
- StateBuilder: Calculate parent state name when ends in two wildcards
**
(b4621f3)
- Remove
UIInjector.native
infavor ofUIInjector.getNative()
(d11b7dc) - Remove
stateProvider
from ui-router-core. UsestateRegistry
andstateService
in 88c6494 - We now enforce states with an explicit
parent:
may NOT ALSO specify a parent state in their name (i.e.,parent.child
)
Major breaking changes for Angular 2 bootstrap between beta.2 and beta.3
- Removed
@UIRouterModule
decorator. - Added
UIRouterModule.forRoot()
andUIRouterModule.forChild()
factory methods - See https://ui-router.github.io/docs/latest/classes/ng2.uiroutermodule.html
@NgModule({ imports: [ UIRouterModule.forRoot({ states: INITIAL_STATES, useHash: true, configClass: MyUIRouterConfig }), BrowserModule, FeatureModule, ], declarations: INITIAL_COMPONENTS }) class RootAppModule {}
@NgModule({ imports: [ UIRouterModule.forChild({ states: FEATURE_STATES, configClass: FeatureConfig }), CommonModule, ], declarations: FEATURE_COMPONENTS })
1.0.0-beta.2 commits (2016-09-09)
- lazyLoad: Add state.lazyLoad hook to lazy load a tree of states (bef5257) (8ecb6c6), closes #146 #2739
- StateRegistry: Add
deregister
method. (44579ec), closes #1095 #2711 - redirectTo: Process
redirectTo
property of a state as a redirect string/object/hook function (6becb12), closes #27 #948 - redirect: Error after 20+ redirected transitions (88052bf)
- rejectFactory: separate transition aborted and transition errored reject types (55995fd)
- Resolve: support ng2-like provide object literals (a7e5ea6)
- Resolve: Switch state.resolve to be an array of Resolvables (6743a60)
- Transition: Add the transition source (url/sref) to TransitionOptions (5d42d79)
- Transition: Added
getResolvable(token)
method (3aee2b7) - Transition: expose the current
UiRouter
object as a public property (52f1308) - Transition: expose the transition rejection reason as
Transition.error()
(7a9e383), closes #2866 - Transition: Expose the transition's TargetState as targetState() (f06f6b6)
- urlRouter: Allow a rule to be deleted. (55f3d3d)
- ng2.rx: Added RxJS Observables for transitions and states: (2a2f381)
- ng2: Add @UIRouterModule decorator (e7bedc2), closes #2922
- ng2: Improve ng2 bootstrap flexibility with provideUIRouter() provider factory function (bc17066), closes #2958
- ng2.UrlRouter: Implement { location: replace } (b8c6146), closes #2850
- ng2.NgModule: Add module's states to DI using UIROUTER_STATES_TOKEN (0cb628e)
- ng2.stateRegistry: Automatically register states defined on a UIRouterModule (58a3c84)
- ng2.UIView: Use merged NgModule/ParentComp to inject routed component (37241e7)
- ng2.upgrade: Enable ng1-to-ng2 (0bf4eb4)
- uiView: Support Components loaded via AppModule (696148f)
- defaultErrorHandler: Invoke handler when a transition is Canceled. (4fcccd8), closes #2924
- defaultErrorHandler: log Error and Error.stack by default (e102a85)
- defaultErrorHandler: Reduce console.error noise when redirected (8c0344f)
- common: Add concrete import to interface.ts to fix unit tests (2d16740)
- redirect: fix bug where redirected transitions with reload: true got wrong resolve values copied (bd0e3a3)
- redirectTo: fix redirectTo definition (interface) (eff7195), closes #2871
- Rejection: Silence "Error: Uncaught (in Exception)" (38432f4), closes #2676
- Resolve: prevent RXWAIT from waiting for the observable to complete (a02caf3)
- ResolvePolicy: Fix resolve policy config loading (4440811), closes #2945
- stateService: change reloadState parameter in reload function is optional (#2973) (839dc4a)
- StateService: remove jQuery deprecated feature (fa40acc)
- trace: make TRANSITION trace less noisy when a transition is redirected (a65c58f)
- Trace: Fix error in console after $trace.enable() (013c77a), closes #2752
- transitionHook: Prevent queued hookFn to be called if deregistered (#2939) (39e1ba7), closes #2928
- typescript: Make UI-Router
noImplicitAny
safe. (0769bc2), closes #2693 - typescript: Remove angular1 specific types from ui-router-core methods (30124bd), closes #2693
- ng1.stateService: Coerce 'null'
params
value to empty object (f674151), closes #2952 - ng1.uiSref: Allow nested UISrefs by stopping event propagation on-click (b4a2499), closes #2962
- ng1.uiSrefActive: update sref-active after existing transition-in-progress completes (0994c71), closes #2908
- uiSref, uiState: added click unbind to prevent memory leaks (79d501e)
- uiView: separate $uiView and $uiViewAnim element.data() (a94117d), closes #2763
- ng2.pushState: Properly match urls when base path set (b9be2dc), closes #2745
- ng2.UIRouterConfig: Allow new UIRouter() to finish before configuring it (a151f71)
- ng2.uiSrefActive: Allow uiSrefActive on ancestor element. (874fc07), closes #2950
- ng2.uiSrefActive: don't puke on sref to invalid target state (c9b6570)
- ng2.UISrefActive: Use @ContentChildren to query for the nested UISref (999c42a), closes #2950
- ng2.UiView: fix input resolve binding (4f53f81)
- ng2.UIView: Make routed to component appear inside UIView, not next to it. (558fc80)
- State Glob patterns have been changed slightly.
Previously, a single wildcard foo.*
could match "missing segments" on the end of a state name.
For example, foo.*
would match the state foo
.
Likewise, foo.*.*.*
would also match the foo
state.
Now, a single wildcard matches exactly one segment.
foo.*
will match foo.bar
and foo.baz
, but neither foo
nor foo.bar.baz
.
If you previously relied on the single wildcard to match missing segments, use a double wildcard, foo.**
.
Double wildcards match 0 or more segments.
-
(obscure) Angular 1 DI token
ng1UIRouter
renamed to$uiRouter
-
(obscure) Renamed
Transition.previous()
toTransition.redirectedFrom()
1.0.0-beta.1 commits (2016-06-30)
https://ui-router.github.io/new-ui-router-site/
These breaking changes are for users upgrading from a previous alpha, not from 0.x legacy series. This list is extensive, but typical users won't be affected by most of these changes.
The most common breaks will be #1 and #2
-
BC-BREAK: renamed all Ui* (lowercase 'i') symbols to UI* (uppercase 'I') for more consistent naming.
- UiView -> UIView
- UiSref -> UISref (and related directives)
- UiInjector -> UIInjector
-
BC-BREAK: Transition Hooks are no longer injected (onBefore/onStart/onExit/onRetain/onEnter/onFinish/onSuccess/onError)
Previously, a hook like
['$state', ($state) => $state.target('foo')]
would get$state
injected. Now, all hooks receive two parameters:- transition: the current Transition, which has an
injector()
function - state: for onEnter/onRetain/onExit hooks only, the State which the hook is being run for. This value will be null for onBefore/onStart/onFinish/onSuccess/onError hooks.
Refactor your hooks from:
['$state', 'mySvc', ($state, mySvc) => mySvc.foo() ? $state.target('foo')] : true
to:(trans) => trans.injector().get('mySvc').foo() ? trans.router.stateService.target('foo') : true
Note: for backwards compatiblity, angular 1 onEnter/onExit/onRetain hooks are still injected
- transition: the current Transition, which has an
-
BC-BREAK: - The (internal API) State object's .resolve property is now an array of Resolvables, built from your state definitions by the StateBuilder
-
BC-BREAK: - Removed the default resolve called
$resolve$
, which was added in a previous alpha -
BC-BREAK: -
Transition.addResolves()
replaced withTransition.addResolvable()
-
BC-BREAK: remove
ResolveContext.getResolvables()
in favor of.getToken()`` and
.getResolvable()` -
BC-BREAK: remove
ResolveContext.invokeLater()
and.invokeNow()
-
BC-BREAK: remove support for
JIT
resolves. This also eliminated the need for theloadAllControllerLocals
hook which was also removed -
BC-BREAK: Replaced
ViewConfig.node
withViewConfig.path
. Angular 1's$(element).data('$uiView')
is affected. Previously the .node was the node for the view. Now the last element in the path is the node for the view. -
BC-BREAK: Nodes no longer have (stateful)
.resolveContext
properties. Instead, a new ResolveContext is wrapped over a Path of Nodes. RemovedPathFactory.bindResolveContexts()
. -
BC-BREAK: ResolveContext.resolvePath returns a promise for resolved data as an array of tuples, instead of a promise for an object of resolved data. Removed
ResolveContext.resolvePathElement()
. -
BC-BREAK: Removed ResolvePolicy enum in favor of the ResolvePolicy interface
{ when: "", async: "" }
-
BC-BREAK: renamed
ResolveContext.isolateRootTo
tosubContext
-
BC-BREAK: rename
UIRouterGlobals
class toGlobals
; addUIRouterGlobals
back as an interface -
BC-BREAK: Moved
defaultErrorHandler
fromTransitionService
toStateService
- Resolve: Switch state.resolve to be an array of Resolvables (6743a60)
- Resolve: support ng2-like provide object literals. Support injection of arbitrary tokens, not just strings. (a7e5ea6)
- Resolve: support ng2-like provide object literals (a7e5ea6)
- Transition: expose the current
UiRouter
object as a public property (52f1308) - redirectTo: Process
redirectTo
property of a state as a redirect string/object/hook function (6becb12), closes #27 #948 - rejectFactory: separate transition aborted and transition errored reject types (55995fd)
- ParamType: allow a custom parameter Type to specify a default value for a parameter's
dynamic
property - Resolvable: Added a new Resolve Policy 'RXWAIT'. If an Observable is returned, pass the observable as the value, but also wait for it to emit its first value
- ng2.pushState: Properly match urls when base path set (b9be2dc), closes #2745
- ng2.UIRouterConfig: Allow new UIRouter() to finish before configuring it (a151f71)
- ng2.UiView: fix input resolve binding (4f53f81)
- ng2.UIView: Make routed to component appear inside UIView, not next to it. (558fc80)
- redirect: fix bug where redirected transitions with reload: true got wrong resolve values copied (bd0e3a3)
- Rejection: Silence "Error: Uncaught (in Exception)" (38432f4), closes #2676
- Trace: Fix error in console after $trace.enable() (013c77a), closes #2752
- ng2.UIView: Trigger change detection once for routed components
1.0.0-alpha.5 commits (2016-05-13)
- attachRoute: Do not update URL after syncing from url(8742511), closes #2730
- common: only use window if available(32ff988)
- coreservices: Use Promise.reject()/resolve()/all()(62b2ebc), closes #2683
- paramTypes.hash: Update hash for each transition(79d4fd7), closes #2742
- Rejection: Dont log an ignored trans as console.error(7522c26), closes #2676
- resolve: Fix regression; Allow resolve values to be service names(a34fd3b), closes #2588
- StateQueueManager: Do not throw on orphan states.(95ae0cf), closes #2546
- TransitionManager: Update url even when the Transition is ignored.(f9c3e3c), closes #2723
- ng1.component: Allow route-to-component "@" and optional bindings(71b3393), closes #2708
- view: only run ng1 route-to-component code if component: is a string(ec1c534)
- ng2.uiSrefStatus: Avoid "dehydrated detector" error(9111727), closes #2684
- ng2.uiView: Fix "Invalid left-hand in assignment"(3f711a1)
- build: declare external dep on
angular/core
in webpack bundle(adfbde3), closes #2687
- ng2.uiView: bind resolve data to input[] and @Input(), process bindings:(f6dae28)
- ng2.urlRouter: HTML5 PushState support(9842fb7), closes #2688
- ng2.UIRouter: update to ng2 beta.17(45c0758)
- ng2.UIRouter: Update ui-router for ng2 rc.1(3219406), closes #2722
1.0.0-alpha.4 commits (2016-04-06)
- ng2.uiView: Fix "Invalid left-hand in assignment" (3f711a1)
- view: only run ng1 route-to-component code if component: is a string (ec1c534)
- uiView: add support for hybrid ng1/ng2 ui-router apps via ng-upgrade and http://github.com/ui-router/ng1-to-ng2
- ng2.uiView: bind resolve data to input[] and @Input(), process bindings: (f6dae28)
1.0.0-alpha.2 (2016-04-03)
Changes between 1.0.0-alpha.1 and 1.0.0-alpha.2
This is the first release with angular 2 support. See http://github.com/ui-router/quickstart-ng2 for a small ui-router-ng2 app
- ViewHooks: Avoid calling $onInit if angular 1.5 will call it for us (d42b617), closes #2660
- ViewHooks: Fix problem with injecting uiCanExit (76ab22d), closes #2661
- view: temporary sanity check that a node exists (1c0edeb), closes #2657
- justjs.$q: Fix $q.all([..]) and $q.all({...}) (b1624c6)
- ng2.uiSref: Fix anchor href generation (98b5b42)
- ng2.uiSrefStatus: calculate target state parameters (46cdf4c)
- ng2.uiView: Dispose prev comp on empty viewconfig (f28e0c3)
- UIRouterConfig: Define UIRouterConfig class for router bootstrap (c16b9e6)
- UIRouterGlobals: Create UIRouterGlobals (0eb7406), closes #2525
- ui-router-ng2: Update providers and viewsBuilder to match new 1.0 API (ff54d61)
- ng2.uiSrefActive: Implement uiSrefStatus, uiSrefActive, uiSrefActiveEq (fcb15c5)
1.0.0-alpha.1 commits (2016-03-27)
We will maintain a list of Known BC from 0.2.x to 1.0 final to help people upgrade to the 1.0 release.
- date: Compare dates only using year, month, date (7a68ade), closes #2484
- params: Clone all properties of a Node. Introduce applyRawParams() (88c624d)
- RejectFactory: stringify rejections with circular dependency-aware stringify (199db79), closes #2538
- src/resolve: use injector's strictDi value in calls to .annotate (4c5b5d8)
- stateQueueManager: Use
location: true
for url-matched transitions (25e0c04), closes #2455 - stateService: Process reload: in the StateService.target() (081da32), closes #2537
- Transition: Do not reuse resolves for reloaded state during redirect (0c123c3), closes #2539
- Transition: Reject Transition promise when onBefore error (4b6d56f), closes #2561
- Transition: Reset URL to current state after aborted transition (3a1308b), closes #2611
- transition/transitionService: uses console.error to log error in default error handler (43a8fc5)
- ui-sref: update ui-sref-active/eq info when params change (dcbaebf), closes #2554
- ui-state: update ui-sref-active/eq info (025ebc8), closes #2488
- UrlMatcher: Format parent/child UrlMatchers properly (86e07ef), closes ##2504
- UrlMatcher: isOptional always false for empty parameter (4e85db4)
- params: Add uiOnParamsChanged controller callback (961c96d), closes #2608 #2470 #2391 #1967
- resolve: Allow all resolved data for a node to be injected as
$resolve$
(e432c27) - state: Expose the internal state API via
$$state()
(92053f1), closes #13 - ui-router-ng2: Initial angular2 support (217de70)
- uiCanExit: Add controller lifecycle hook "uiCanExit" (afcfe95)
- uiView: Expose the resolved data for a state as $scope.$resolve (0f6aea6), closes #2175 #2547
- uiView: Fire the $onInit hook (c8afc38), closes #2559
- uiView: Put $animate promises on element.data('$uiView') (a5578de), closes #2562 #2579
- view: Route a view to a directive using
component:
(1552032), closes #2627
Many of these commits are merged from 0.2.x legacy
branch
- uiSrefActive: allow multiple classes (120d7ad), closes #2481 #2482
- justjs: provide naive implementation of most of the coreservices api (426f134)
- resolve: add $resolve service back to 1.0 (70c6659)
- uiSrefActive: allow active & active-eq on same element (d9a676b), closes #1997
- uiSrefActive: provide a ng-{class,style} like interface (a9ff6fe), closes #1431
- uiSrefActive: Added support for multiple nested uiSref directives (b184494)
- uiState: add ui-state directive (3831af1), closes #395 #900 #1932
- urlMatcher: add support for optional spaces (4b7f304)
- urlMatcher: Add param only type names (6a371f9)
- $IncludedByStateFilter: add parameters to $IncludedByStateFilter (963f6e7), closes #1735
- $state: make state data inheritance prototypical (c4fec8c)
- $state: Inject templateProvider with resolved values (afa20f2)
- $state: added 'state' to state reload method (feat no.1612) (b8f0457)
- $state: broadcast $stateChangeCancel event when event.preventDefault() is called in $sta (ecefb75)
- $state: inject resolve params into controllerProvider (b380c22), closes #1131
- $state: support URLs with #fragments (3da0a17)
- $uiViewScroll: change function to return promise (c2a9a31), closes #1702
This is a maintenance release which fixes a few known bugs introduced in 0.2.16.
- $urlRouter: revert BC: resolve clashing of routes This reverts commit b5c57c8ec2e14e17e75104 (2f1ebefc, closes #2501)
- uiState: Corrected typo for 'ref' variable (#2488, #2508) (b8f3c144)
- $urlMatcherFactory: Fix to make the YUI Javascript compressor work (ad9c41d2)
- stateBuilder: fix non-url params on a state without a url. The parameters are now applied when (d6d8c332, closes #2025)
- ui-view: (ui-view) use static renderer when no animation is present for a ui-view (2523bbdb, closes #2485). This allows a ui-view scope to be destroyed when switching states, before the next view is initialized.
- ui-view: Add noanimation attribute to specify static renderer. (2523bbdb, closes #2485). This allows a ui-view scope to be destroyed before the next ui-view is initialized, when ui-view animation is not present.
- $state:
- statechangeCancel: Avoid infinite digest in .otherwise/redirect case. Don't clobber url if a new transition has started. Closes #222 (e00aa695, closes #2238)
- transitionTo: Allow hash (#) value to be read as toParams['#'] in events. Re-add the saved hash before broadcasting $stateChangeStart event. (8c1bf30d)
- $stateParams: Fix for testing: reset service instance between tests (2aeb0c4b)
- $urlRouter:
- UrlMatcher:
- Properly encode/decode slashes in parameters Closes #2172 Closes #2250 Closes #1 (02e98660, closes #2339)
- Array types: Fix default value for array query parameters. Pass empty arrays through in handler. (20d6e243, closes #2222)
- Remove trailing slash, if parameter is optional and was squashed from URL (77fa11bf, closes #1902)
- Allow a parameter declaration to configure the parameter type by name. closes #2294 (e4010249)
- include the slash when recognizing squashed params in url (b5130bb1, closes #2064)
- Allow url query param names to contain periods (d31b3337)
- reloadOnSearch: Update
locals.globals.$stateParams
when reloadOnSearch=false (350d3e87, closes #2356) - ui-view:
- uiSref:
- $IncludedByStateFilter: add parameters to $IncludedByStateFilter (963f6e71, closes #1735)
- isStateFilter: Include optional state params. (71d74699)
- $state: make state data inheritance prototypical (c4fec8c7)
- $stateChangeStart: Add options to event (a1f07559)
- UrlMatcher: Add param only type names (6a371f9b)
- uiSrefActive:
- uiState: add ui-state directive (3831af1d, closes #395, #900, #1932)
- urlMatcher: add support for optional spaces in params (4b7f3046)
- $state: reloadOnSearch should not affect non-search param changes. (6ca0d770, closes #1079)
- urlMatcherFactory: Revert to 0.2.13 behavior where all string parameters are considered optional fi (495a02c3, closes #1963)
- urlRouter: allow .when() to redirect, even after a successful $state.go() - This partially (48aeaff6, closes #1584)
- $state: Inject templateProvider with resolved values (afa20f22)
- $StateRefDirective: resolve missing support for svg anchor elements #1667 (0149a7bb)
- $urlMatcherFactory:
- $state: allow about.*.** glob patterns (e39b27a2)
- uiSref:
- uiSrefActive: Apply active classes on lazy loaded states (f0ddbe7b)
- uiView: add
$element
to locals for view controller (db68914c)
- $state:
- $uiViewScroll: change function to return promise (c2a9a311, closes #1702)
- uiSrefActive: Added support for multiple nested uiSref directives (b1844948)
This release primarily fixes issues reported against 0.2.12
- $state: fix $state.includes/.is to apply param types before comparisions fix(uiSref): ma (19715d15, closes #1513)
- $urlMatcherFactory:
- Built-in date type uses local time zone (d726bedc)
- make date type fn check .is before running (aa94ce3b, closes #1564)
- early binding of array handler bypasses type resolution (ada4bc27)
- add 'any' Type for non-encoding non-url params (3bfd75ab, closes #1562)
- fix encoding slashes in params (0c983a08, closes #1119)
- fix mixed path/query params ordering problem (a479fbd0, closes #1543)
- ArrayType:
- Param: fix default value shorthand declaration (831d812a, closes #1554)
- common: fixed the _.filter clone to not create sparse arrays (750f5cf5, closes #1563)
- ie8: fix calls to indexOf and filter (dcb31b84, closes #1556)
- add json parameter Type (027f1fcf)
- $resolve: use resolve fn result, not parent resolved value of same name (67f5e00c, closes [#1317], [#1353])
- $state:
- $urlMatcherFactory:
- register types at config (4533fe36, closes [#1476])
- made path params default value "" for backwards compat (8f998e71)
- Pre-replace certain param values for better mapping (6374a3e2)
- fixed ParamSet.$$keys() ordering (9136fecb)
- empty string policy now respected in Param.value() (db12c85c)
- "string" type now encodes/decodes slashes (3045e415, closes [#1119])
- allow arrays in both path and query params (fdd2f2c1, closes [#1073], [#1045], [#1486], [#1394])
- typed params in search (8d4cab69, closes #1488)
- no longer generate unroutable urls (cb9fd9d8, closes #1487)
- handle optional parameter followed by required parameter in url format. (efc72106)
- default to parameter string coersion. (13a468a7, closes #1414)
- concat respects strictMode/caseInsensitive (dd72e103, closes [#1395])
- ui-sref:
- uiView:
- urlRouter: html5Mode accepts an object from angular v1.3.0-rc.3 (7fea1e9d)
- stateFilters: mark state filters as stateful. (a00b353e, closes [#1479])
- ui-router: re-add IE8 compatibility for map/filter/keys (8ce69d9f, closes [#1518], [#1383])
- package: point 'main' to a valid filename (ac903350)
- travis: make CI build faster (0531de05)
This release includes a lot of bug fixes around default/optional and typed parameters. As such, 0.2.12 is the first release where we recommend those features be used.
- $state:
- $templateFactory: request templateURL as text/html (ccd60769, closes [#1287])
- $urlMatcherFactory: Made a Params and ParamSet class (0cc1e6cc)
- $resolve: Resolves only inherit from immediate parent fixes #702 (df34e20c)
- $state:
- $urlMatcherFactory:
- UrlMatcher:
- travis: update Node version to fix build (d6b95ef2)
- uiSref:
- uiView: Fixed infinite loop when is called .go() from a controller. (e13988b8, closes #1194)
- docs:
- $state:
- typescript: Add typescript definitions for component builds (521ceb3f)
- uiSref: extend syntax for ui-sref (71cad3d6)
- uiSrefActive:
-
Also activate for child states. (bf163ad6, closes #818)
- BREAKING CHANGE Since ui-sref-active now activates even when child states are active you may need to swap out your ui-sref-active with ui-sref-active-eq, thought typically we think devs want the auto inheritance.
-
uiSrefActiveEq: new directive with old ui-sref-active behavior
-
- $urlRouter:
- $urlMatcherFactory:
- UrlMatcher:
- handle query string arrays (9cf764ef, closes #373)
- injectable functions as defaults (00966ecd)
- default values & type decoding for query params (a472b301)
- allow shorthand definitions (5b724304)
- validates whole interface (32b27db1)
- implement non-strict matching (a3e21366)
- add per-param config support (07b3029f)
- BREAKING CHANGE: the
params
option in state configurations must now be an object keyed by parameter name.
- BREAKING CHANGE: the
- $state: use $browser.baseHref() when generating urls with .href() (cbcc8488)
- bower.json: JS files should not be ignored (ccdab193)
- dev: karma:background task is missing, can't run grunt:dev. (d9f7b898)
- sample: Contacts menu button not staying active when navigating to detail states. Need t (2fcb8443)
- uiSref: support mock-clicks/events with no data (717d3ff7)
- uiView:
- $state: includes() allows glob patterns for state matching. (2d5f6b37)
- UrlMatcher: Add support for case insensitive url matching (642d5247)
- uiSref: add support for transition options (2ed7a728)
- uiView: add controllerAs config with function (1ee7334a)
This release is identical to 0.2.8. 0.2.8 was re-tagged in git to fix a problem with bower.