Page 364 - AngularJS权威教程
P. 364
344 第 25 章 AngularJS 精华扩展
25.3.4 $urlRouterProvider
和ngRoute一样,你可以使用路由提供程序构建规则,规定当特定的URL被激活时会发生什么。
创建的这些状态负责在不同的URL中激活自身,因此不一定需要$urlRouterProvider来管
理激活和加载状态。当你想要管理发生在状态作用域之外的行为时,它就可以派上用场了,比如
重定向或者身份验证。
你可以在模块配置函数中使用$urlRouterProvider。
when() when函数接受两个参数:想要匹配的入口路径和用于重定向的路径(或者是在路径
匹配时调用的函数)。
为了设置重定向,需要给when方法设置一个字符串参数。
例如,如果想将一个空路由重定向到/inbox:
.config(function($urlRouterProvider) {
$urlRouterProvider.when('', '/inbox');
});
如果传入一个函数,它会在路径匹配时调用。这个处理程序可能返回以下三个值中的一个。
falsy 这个值告诉$urlRouter该规则不匹配,同时它应该尝试找到一个不同的状态来
匹配。如果想要确保用户可以正确地访问一个URL,它将很有帮助。
字符串 $urlRouter会把这个字符串值当作重定向的URL。
truthy or undefined 这个值让$urlRouter知道已经处理了URL。
otherwise() 和ngRoute中的otherwise()方法一样,这个otherwise()方法在没有其他路
由匹配时发起重定向。这个方法是创建默认URL的一种很好的方式。
otherwise()方法接受一个参数:一个字符串或者函数。
如果传入一个字符串,任何无效或者不匹配的路由都会重定向到字符串指定的URL。
如果传入一个函数,它会在没有其他路由匹配时被调用,同时负责处理返回结果。
.config(function() {
$urlRouterProvider.otherwise('/');
// 或者
$urlRouterProvider.otherwise(function($injector, $location) {
$location.path('/');
});
});
rule() 如果想要绕过所有的URL匹配,或者想要在操作其他路由之前对路由做一些操作,
可以使用rule()函数。
使用rule()函数时必须返回一个有效路径字符串。
.config(function($urlRouterProvider) {
$rulRouterProvider.rule(function($injector, $location) {
return '/index';
});
});