Page 122 - AngularJS权威教程
P. 122

102  第 12 章  多重视图和路由


             标路径触发路由变化。
                 如果redirectTo属性的值是一个函数,AngularJS会在调用它时传入下面三个参数中:

                 (1) 从当前路径中提取出的路由参数;
                 (2) 当前路径;

                 (3) 当前URL中的查询串。

                 6. reloadOnSearch
                 如果reloadOnSearch选项被设置为true (默认),当$location.search()发生变化时会重新
             加载路由。如果设置为false,那么当URL中的查询串部分发生变化时就不会重新加载路由。这
             个小窍门对路由嵌套和原地分页等需求非常有用。
                 现在介绍用when函数来设置路由。

                 下面的例子中设置了两个路由:一个首页路由和一个收件箱路由,同时首页路由被设置成默
             认路由。

                 angular.module('MyApp', []).
                     config(['$routeProvider', function($routeProvider) {
                         $routeProvider
                             .when('/', {
                                 controller: 'HomeController',
                                 templateUrl: 'views/home.html'
                             })
                             .when('/inbox/:name', {
                                 controller: 'InboxController',
                                 templateUrl: 'views/inbox.html'
                             })
                             .otherwise({redirectTo: '/'});
                       }]);

                 如上,我们已经用when方法设置了两个路由。otherwise方法会在没有任何路由匹配时被调
             用,我们用它设置了一个默认跳转到'/'路径的路由。

                 当浏览器加载AngularJS应用时,会将URL设置成默认路由所指向的路径。除非我们在浏览
             器中加载不同的URL,否则默认会使用/路由。

             $routeParams

                 前面提到如果我们在路由参数的前面加上:,AngularJS就会把它解析出来并传递给$routeParams。
             例如,如果我们设置下面这样的路由:

                 $routeProvider
                     .when('/inbox/:name', {
                       controller: 'InboxController',
                       templateUrl: 'views/inbox.html'
                     });
                 AngularJS会在$routeParams中添加一个名为name的键,它的值会被设置为加载进来的URL
             中的值。
                 如果浏览器加载/inbox/all这个URL,那么$routeParams对象看起来会是下面这样:
   117   118   119   120   121   122   123   124   125   126   127