AngularJS 避繁就简的路由


Posted in Javascript onJuly 01, 2016

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

AngularJS 避繁就简的路由

先看看$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>

单击“首页”

AngularJS 避繁就简的路由

单击“电脑”

AngularJS 避繁就简的路由

单击“手机”

AngularJS 避繁就简的路由

单击“其他”

AngularJS 避繁就简的路由

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
Oct 14 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
Nov 21 Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
基于Turn.js 实现翻书效果实例解析
Jun 20 Javascript
jQuery实现的网格线绘制方法
Jun 20 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
Nov 16 Javascript
利用CDN加速react webpack打包后的文件详解
Feb 22 Javascript
Vuepress 搭建带评论功能的静态博客的实现
Feb 17 Javascript
vue路由对不同界面进行传参及跳转的总结
Apr 20 Javascript
js实现图片3D轮播效果
Sep 21 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
AngularJS使用指令增强标准表单元素功能
Jul 01 #Javascript
AngularJS实现分页显示数据库信息
Jul 01 #Javascript
AngularJS内建服务$location及其功能详解
Jul 01 #Javascript
学习Angularjs分页指令
Jul 01 #Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
Jul 01 #Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
Jul 01 #Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 #Javascript
You might like
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP PDOStatement::fetchObject讲解
2019/02/01 PHP
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
js根据给定的日期计算当月有多少天实现思路及代码
2013/02/25 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
基于node实现websocket协议
2016/04/25 Javascript
json的使用小结
2016/06/08 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
Django实现单用户登录的方法示例
2019/03/28 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
Python读取xlsx文件的实现方法
2019/07/04 Python
Python pandas如何向excel添加数据
2020/05/22 Python
Python 忽略文件名编码的方法
2020/08/01 Python
烹饪大赛策划方案
2014/05/26 职场文书
大学迎新生标语
2014/10/06 职场文书
班主任先进事迹材料
2014/12/17 职场文书
新郎婚礼致辞
2015/07/27 职场文书
母亲节感言
2015/08/03 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
mysql5.6主从搭建以及不同步问题详解
2021/12/04 MySQL
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript