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 相关文章推荐
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
Aug 18 Javascript
javascript 中的console.log和弹出窗口alert
Aug 30 Javascript
vue多级多选菜单组件开发
Sep 08 Javascript
Bootstrap源码学习笔记之bootstrap进度条
Dec 24 Javascript
原生JS轮播图插件
Feb 09 Javascript
JS实现图片手风琴效果
Apr 17 Javascript
基于复选框demo(分享)
Sep 27 Javascript
薪资那么高的Web前端必看书单
Oct 13 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
Sep 05 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 Javascript
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
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创建桌面快捷方式的实例代码
2014/02/17 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
php通过排列组合实现1到9数字相加都等于20的方法
2015/08/03 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
jquery中ajax学习笔记一
2011/10/16 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
JavaScript实现16进制颜色值转RGB的方法
2015/02/09 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
python循环输出三角形图案的例子
2019/11/22 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
2014年上半年工作自我评价
2014/01/18 职场文书
会计专业毕业自荐书范文
2014/02/08 职场文书
阳光体育活动方案
2014/02/16 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
学校节能减排倡议书
2014/05/16 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
军训结束新闻稿
2015/07/17 职场文书
2017春节晚会开幕词
2016/03/03 职场文书
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python