上QQ阅读APP看书,第一时间看更新
6.2 通过URL向控制器传递参数
前面我们已经学习了如何定义路由,并通过路由机制实现了一个简单的多视图应用,本节我们将学习AngularJS路由如何通过URL传递参数。
如图6.3所示,假如我们有这样一个应用场景,通过URL中传递的订单号(orderId)来获取某条订单的明细。
图6.3 通过orderId参数获取订单明细
在路由定义时,我们可以在URL中增加一个参数orderId,用冒号隔开,如下面的代码所示。
代码清单:ch06\ch06_02\js\app.js
var routeModule = angular.module('routeModule', ['ngRoute']); routeModule.config(['$routeProvider', function($routeProvider){ $routeProvider. when('/showOrder/:orderId', { templateUrl: 'templates/order-details.html', controller: 'ShowOrderController' }) }]); routeModule.controller("ShowOrderController”, function($scope, $routeParams){ $scope.order_id = $routeParams.orderId; });
为了获取URL中传递的参数,我们在控制器中注入$routeParams服务,通过$routeParams. orderId属性访问URL中传递的参数,这里把参数保存在$scope对象的order_id属性中:
$scope.order_id = $routeParams.orderId;
我们在订单明细视图order-details.html中简单地把URL中的orderId参数回显到页面中,order-details.html内容如下:
代码清单:ch06\ch06_02\templates\order-details.html
<h2>订单号 #{{order_id}}</h2> 此处为订单明细... <b>#{{order_id}}</b>.
接下来可以在订单列表页面中增加几条订单数据,在URL中传递不同的订单号,单击链接后加载订单明细视图,订单列表页面内容如下:
代码清单:ch06\ch06_02\index.html
<!doctype html> <html ng-app="routeModule"> <head> <meta charset="UTF-8"> <title>ch06_01</title> <link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css"/> <link rel="stylesheet" href="/bootstrap/css/bootstrap-theme.min.css"/> <script src="/angular-1.5.5/angular.js"></script> <script src="/angular-1.5.5/angular-route.js"></script> <script src="js/app.js"></script> <style type="text/css"> .mainDiv{ margin: 25px 50px 75px 50px; } </style> </head> <body> <div class="mainDiv"> <! --导航栏--> <ul class="nav nav-tabs"> <li><a href="#"> <span class="glyphicon glyphicon-th-list"> </span> 订单列表</a> </li> </ul> <div> <table class="table"> <thead> <tr> <th>订单号</th> <th>商品名称</th> <th>操作</th> </tr> </thead> <tbody> <tr class="success"> <td>1102 </td> <td>笔记本电脑</td> <td><a href="#/showOrder/1102">查看明细</a></td> </tr> <tr class ="info"> <td>4531</td> <td>移动硬盘</td> <td><a href="#/showOrder/4531">查看明细</a></td> </tr> <tr class="active"> <td>1036</td> <td>IPhone</td> <td><a href="#/showOrder/1036">查看明细</a></td> </tr> </tbody> </table> </div> <div ng-view></div> </div> </body> </html>
接下来可以在浏览器中运行ch06\ch06_02\index.html页面,效果如图6.4所示。
图6.4 通过URL向控制器传递参数案例
当我们单击不同商品的“查看明细”链接时,可以到控制器中获取订单号。在实际项目开发过程中,我们可能会在控制器中根据订单号向Web服务器请求订单明细数据,这里我们只是简单地把订单号回显到明细视图中。