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';
                     });
                 });
   359   360   361   362   363   364   365   366   367   368   369