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对象看起来会是下面这样: