AngularJS 避繁就简的路由

AngularJS 路由允许我们通过不同的 URL 访问不同的内容。

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

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

#/first
#/second
#/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="https://www.jb51.net/js/angular-route.min.js"></script>

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

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

第三步:使用 ng-view 指令

<div ng-view 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> <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 type="text/css" href="https://www.jb51.net/css/bootstrap.min.css"> </head> <body ng-app='routeApp'> <ul> <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 ng-controller='defaultCtrl'></div> <script type="text/javascript" src="https://www.jb51.net/js/jquery.min.js"></script> <script type="text/javascript" src="https://www.jb51.net/js/bootstrap.min.js"></script> <script type="text/javascript" src="https://www.jb51.net/js/angular.min.js"></script> <script type="text/javascript" src="https://www.jb51.net/js/angular-route.min.js"></script> <script type="text/ng-template"> <h1>{{data}}</h1> </script> <script type="text/ng-template"> <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> <table> <thead> <tr> <th>名称</th> <th>类别</th> <th>价格</th> <th>{{data}}</th> </tr> </thead> <tbody> <tr ng-repeat="item in computers"> <td>{{item.name}}</td> <td>{{item.category}}</td> <td>{{item.price | currency}}</td> <td> <button ng-click="deleteProduct(item)">删除</button> <a href="https://www.jb51.net/edit/{{item.id}}" ng-click="editOrCreateProduct(item)">编辑</a> <button ng-click="incrementPrice(item)">+</button> </td> </tr> </tbody> </table> <div> <button ng-click="editOrCreateProduct()">添加</button> <a href="https://www.jb51.net/article/create" ng-click="editOrCreateProduct()">Add</a> </div> </div>

3.phone.html 页面

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzsgjg.html