您的位置:首页 > Web前端 > AngularJS

AngularJS 避繁就简的路由

2016-06-21 17:48 726 查看
AngularJS 路由允许我们通过不同的 URL 访问不同的内容。

通过 AngularJS 可以实现多视图的单页Web应用(single page web application,SPA)。

通常我们的URL形式为 http://runoob.com/first/page,但在单页Web应用中 AngularJS 通过 # + 标记 实现,例如:

http://runoob.com/#/first http://runoob.com/#/second http://runoob.com/#/third




先看看$routeProvider 的配置对象属性方法:

路由设置对象解析:

$routeProvider.when(url(路由名称), {
template: string(模板提示字符串),
templateUrl: string(模板路径URL),
controller: string, function 或 array(在当前模板创建控制器,生成新的 $scope 作用域),
controllerAs: string(控制器别名),
redirectTo: string, function(重定向地址),
resolve: object<key, function>(当前路由所依赖的模块)
});


实现路由的大致步骤:

第一步:导入ngRoute模块

<script type="text/javascript" src="js/angular-route.min.js"></script>


第二步:在应用模块中使用ngRoute

angular.module("routeApp", ["ngRoute"])


第三步:使用 ng-view 指令

<div ng-view class="well" ng-controller='defaultCtrl'></div>


第四步:配置 $routeProvider 路由规则

...
.config(['$routeProvider', function ($routeProvider){
$routeProvider
.when('/home', {
templateUrl : 'home.tpl.html',
controller : 'HomeCtrl',
})
.when('/computer', {
templateUrl : 'computer.html',
})
.when('/phone', {
templateUrl : 'phone.html',
})
.when('/other', {
templateUrl : 'other.tpl.html',
controller : 'OtherCtrl',
})
}])
...


第五步:通过超链接使用路由

<ul class="nav nav-tabs">
<li><a href="#/home">首页</a></li>
<li><a href="#/computer">电脑</a></li>
<li><a href="#/phone">手机</a></li>
<li><a href="#/other">其他</a></li>
</ul>


完整案例:

1 route.html页面

<html>
<head>
<meta charset="utf-8">
<title>AngularJS 路由实例</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
</head>
<body ng-app='routeApp'>
<ul class="nav nav-tabs"> <li><a href="#/home">首页</a></li> <li><a href="#/computer">电脑</a></li> <li><a href="#/phone">手机</a></li> <li><a href="#/other">其他</a></li> </ul>
<div ng-view class="well" ng-controller='defaultCtrl'></div>

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
<script type="text/javascript" src="js/angular.min.js"></script>
<script type="text/javascript" src="js/angular-route.min.js"></script>
<script type="text/ng-template" id="home.tpl.html">
<h1>{{data}}</h1>
</script>
<script type="text/ng-template" id="other.tpl.html">
<h1>{{data}}</h1>
</script>
<script type="text/javascript">
angular.module("routeApp", ["ngRoute"])
.config(['$routeProvider', function ($routeProvider){
$routeProvider
.when('/home', {
templateUrl : 'home.tpl.html',
controller : 'HomeCtrl',
})
.when('/computer', {
templateUrl : 'computer.html',
})
.when('/phone', {
templateUrl : 'phone.html',
})
.when('/other', {
templateUrl : 'other.tpl.html',
controller : 'OtherCtrl',
})
}])
.controller('defaultCtrl', function ($scope) {
$scope.computers = [
{ id: 0, name: "宏基", category: "Test", price: 1.25 },
{ id: 1, name: "联想", category: "Test", price: 2.45 },
{ id: 2, name: "苹果", category: "Test", price: 4.25 }
];
$scope.phones = [
{ id: 0, name: "三星", category: "Test", price: 1.25 },
{ id: 1, name: "荣耀", category: "Test", price: 2.45 },
{ id: 2, name: "魅族", category: "Test", price: 4.25 }
];
})
.controller("HomeCtrl", function ($scope, $route) {
$scope.$route = $route;
$scope.data = "Home Home";
})
.controller("OtherCtrl", function ($scope, $route) {
$scope.$route = $route;
$scope.data = "Other Other";
})
</script>
</body>
</html>


2.computer.html 页面

<div class="panel-body">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>名称</th>
<th>类别</th>
<th class="text-right">价格</th>
<th>{{data}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in computers">
<td>{{item.name}}</td>
<td>{{item.category}}</td>
<td class="text-right">{{item.price | currency}}</td>
<td class="text-center">
<button class="btn btn-xs btn-primary" ng-click="deleteProduct(item)">删除</button>
<a href="/edit/{{item.id}}" class="btn btn-xs btn-primary" ng-click="editOrCreateProduct(item)">编辑</a>
<button class="btn btn-xs btn-primary" ng-click="incrementPrice(item)">+</button>
</td>
</tr>
</tbody>
</table>
<div>
<button class="btn btn-xs btn-primary" ng-click="editOrCreateProduct()">添加</button>
<a href="create" class="btn btn-xs btn-primary" ng-click="editOrCreateProduct()">Add</a>
</div>
</div>


3.phone.html 页面

<div class="panel-body">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>名称</th>
<th>类别</th>
<th class="text-right">价格</th>
<th>{{data}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in phones">
<td>{{item.name}}</td>
<td>{{item.category}}</td>
<td class="text-right">{{item.price | currency}}</td>
<td class="text-center">
<button class="btn btn-xs btn-primary" ng-click="deleteProduct(item)">删除</button>
<a href="/edit/{{item.id}}" class="btn btn-xs btn-primary" ng-click="editOrCreateProduct(item)">编辑</a>
<button class="btn btn-xs btn-primary" ng-click="incrementPrice(item)">+</button>
</td>
</tr>
</tbody>
</table>
<div>
<button class="btn btn-xs btn-primary" ng-click="editOrCreateProduct()">添加</button>
<a href="create" class="btn btn-xs btn-primary" ng-click="editOrCreateProduct()">Add</a>
</div>
</div>


单击“首页”



单击“电脑”



单击“手机”



单击“其他”

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息