Transition Hooks
Transition hooks allow you to tap into the state transition lifecycle. Use them for authentication, authorization, logging, validation, and data preparation.Hook Types
UI-Router provides several hook types that fire at different points in the transition lifecycle:Hook Lifecycle
Hooks execute in this order during a transition:Registering Hooks
Basic Hook Registration
Hook Criteria
Target specific transitions using criteria:Deregistering Hooks
Hook Return Values
Hook return values control transition behavior:Continue Transition
Cancel Transition
Redirect Transition
Async Hooks
Common Hook Patterns
Authentication Hook
Authorization Hook
Logging Hook
Unsaved Changes Hook
Loading State Hook
Page Title Hook
Breadcrumb Hook
State-Specific Hooks
Some hooks fire for specific states:onEnter Hook
Fires when entering a state:onExit Hook
Fires when exiting a state:onRetain Hook
Fires when a state is retained (stays active):Inline State Hooks
Define hooks directly in state declarations:Accessing Services in Hooks
Use the transition’s injector to access services:Transition Object API
The transition object provides information about the transition:Hook Priorities
Control hook execution order:Error Handling
Handle errors in hooks:Best Practices
// Good - specific targeting
transitionService.onBefore({ to: 'admin.**' }, authHook);
// Avoid - runs for all transitions
transitionService.onBefore({}, authHook);
// Good
transitionService.onBefore({}, async (transition) => {
await checkPermissions();
});
// Avoid - not waiting for async
transitionService.onBefore({}, (transition) => {
checkPermissions(); // Returns promise but not awaited
});
// In state
data: { requiresAuth: true, roles: ['admin'] }
// In hook
transitionService.onBefore(
{ to: (state) => state.data?.requiresAuth },
authHook
);
// Good - single responsibility
transitionService.onBefore({}, authHook);
transitionService.onBefore({}, loggingHook);
// Avoid - multiple responsibilities
transitionService.onBefore({}, (transition) => {
checkAuth();
logTransition();
validateParams();
updateAnalytics();
});
Related Documentation
- State Configuration - Define inline hooks
- Navigation - Control navigation with hooks
- Resolve - Load data before transitions
API Reference
- TransitionService - Hook registration methods
- Transition - Transition object API
- TransitionHooks - Hook targeting criteria and function signatures