Watches $location.hashPath
and tries to map the hash to an existing route
definition. It is used for deep-linking URLs to controllers and views (HTML partials).
The $route
service is typically used in conjunction with ng:view
widget.
Register a handler function that will be called when route changes
fn – {function()} –
Function that will be called when $route.current
changes.
Sets route definition that will be used on route change when no other route definition is matched.
params – {Object} –
Mapping information to be assigned to $route.current
.
Sets a scope to be used as the parent scope for scopes created on route change. If not set, defaults to the root scope.
scope – {Scope} –
Scope to be used as parent for newly created
$route.current.scope
scopes.
Causes $route
service to reload (and recreate the $route.current
scope) upon the next
eval even if $location
hasn't changed.
Adds a new route definition to the $route
service.
path – {string} –
Route path (matched against $location.hash
)
params – {Object} –
Mapping information to be assigned to $route.current
on route
match.
Object properties:
controller
– {function()=}
– Controller fn that should be associated with newly
created scope.template
– {string=}
– path to an html template that should be used by
ng:view
or
ng:include
widgets.redirectTo
– {(string|function())=} – value to update
$location
hash with and trigger route redirection.
If redirectTo
is a function, it will be called with the following parameters:
{Object.<string>}
- route parameters extracted from the current
$location.hashPath
by applying the current route template.{string}
- current $location.hash
{string}
- current $location.hashPath
{string}
- current $location.hashSearch
The custom redirectTo
function is expected to return a string which will be used
to update $location.hash
.
Reference to the current route definition.
Array of all configured routes.
This example shows how changing the URL hash causes the $route to match a route against the URL, and the [[ng:include]] pulls in the partial. Try changing the URL in the input box to see changes.
<script> angular.service('myApp', function($route) { $route.when('/Book/:bookId', {template:'rsrc/book.html', controller:BookCntl}); $route.when('/Book/:bookId/ch/:chapterId', {template:'rsrc/chapter.html', controller:ChapterCntl}); $route.onChange(function() { $route.current.scope.params = $route.current.params; }); }, {$inject: ['$route']}); function BookCntl() { this.name = "BookCntl"; } function ChapterCntl() { this.name = "ChapterCntl"; } </script> Chose: <a href="#/Book/Moby">Moby</a> | <a href="#/Book/Moby/ch/1">Moby: Ch1</a> | <a href="#/Book/Gatsby">Gatsby</a> | <a href="#/Book/Gatsby/ch/4?key=value">Gatsby: Ch4</a><br/> <input type="text" name="$location.hashPath" size="80" /> <pre>$location={{$location}}</pre> <pre>$route.current.template={{$route.current.template}}</pre> <pre>$route.current.params={{$route.current.params}}</pre> <pre>$route.current.scope.name={{$route.current.scope.name}}</pre> <hr/> <ng:include src="$route.current.template" scope="$route.current.scope"/>