angular学习笔记(十七)-路由和切换视图
本篇介绍angular中如何通过判断url的hash值来显示不同的视图模板,并使用不同的控制器:
下面,通过一个例子,来一步一步说明它的用法:
我们要做一个邮箱应用,打开的时候显示的是邮件列表:

然后点击邮件主题,可以查看该邮件的详细内容:

点击返回列表,再回到列表页
一. 创建index页面:
<!DOCTYPE html>
<html>
<head>
<title>14.1路由和视图切换</title>
<meta charset="utf-8">
<script src="../../angular.js"></script>
<script src="controller.js"></script>
<link type="text/css" href="style.css" rel="stylesheet" />
</head>
<body>
<div ng-app="A-Mail">
<h3>A-Mail</h3>
<br>
<div ng-view></div>
</div>
</body>
</html>
这一步需要做的事情有:
①. 通过ng-app,使用某个模型来管理页面
②. 通过ng-view,创建空的div,里面的内容会根据url的hash值来调用不同的视图模板,并且使用不同的控制器
③. 写好公共的,始终被显示的视图部分,比如这里的标题: <h3>A-Mail</h3>
二. 创建需要被调用的其它视图, 也就会是放在ng-view中的视图模板:
①list.html:
<table>
<tr><th>发件人</th><th>主题</th><th>发送时间</th></tr>
<tr ng-repeat="message in messages">
<td>{{message.sender}}</td><td><a href="#/view/{{message.id}}">{{message.subject}}</a></td><td>{{message.date}}</td>
</tr>
</table>
当hash值为空的时候,ng-view中应该显示的是邮件的列表.
注意,其中邮件的链接应该使用"#/..." 使用#开头表示改变路径的hash值
比如我输入这个链接:
http://localhost:801/angular/OREILLY/14.1.路由和视图切换/index.html
打开后,它会自己变成:
http://localhost:801/angular/OREILLY/14.1.路由和视图切换/index.html#/
如果跳转到"#/view/001",
url就会变成: http://localhost:801/angular/OREILLY/14.1.路由和视图切换/index.html#/view/001
②detail.html:
<p><b>主题:</b><span>{{message.subject}}</span></p>
<p><b>发件人:</b><span>{{message.sender}}</span></p>
<p><b>发送时间:</b><span>{{message.date}}</span></p>
<h4>To:</h4>
<ul class="clear_float"><li ng-repeat="name in message.recipients">{{name}}; </li></ul>
<hr>
<div>{{message.content}}</div>
<a class="button" href="#/">返回列表</a>
当hash值为view/id的时候,显示的应该是当前id的邮件详细内容
返回列表按钮返回到没有hash值的路径
三. 创建模块,路由,控制器:
var messages = [
{
"id":"001",
"sender":"兔小宝",
"subject":"给小宝买草",
"date":"Dec 7, 2014 12:32:00",
"recipients": ["小a","米米","小黑"],
"content":"今天一定要给我买草啊!!!"
},
{
"id":"002",
"sender":"周孝刚",
"subject":"给小宝加水",
"date":"May 12, 2014 05:04:00",
"recipients": ["兔兔","粥粥","小白"],
"content":"今天一定要给小宝加水啊!!!"
},
{
"id":"003",
"sender":"code_bunny",
"subject":"买凉席",
"date":"Thu 14, 2014 04:14:00",
"recipients": ["white_bunny","sb","小米"],
"content":"今天一定要给买凉席啊!!!"
}
]; var aMail = angular.module('A-Mail',[]); aMail.controller('listControll',function($scope){
$scope.messages = messages;
});
aMail.controller('detailControll',function($scope, $routeParams){
var index = parseInt($routeParams.id)-1;
$scope.message = messages[index];
}); aMail.config(function($routeProvider){
$routeProvider.when('/',{controller:'listControll',templateUrl:'view/list.html'}).when('/view/:id',{controller:'detailControll',templateUrl:'view/detail.html'}).otherwise({redirectTo:'/'})
});
①.messages是虚拟的数据
②.创建该应用使用的模型
③.给该模型创建两个控制器,分别用于控制邮件列表视图和邮件详细内容视图
④.给该模型配置路由:
aMail.config(function($routeProvider){
$routeProvider.when('hash1',{controller:'someController1',templateUrl:'path/to/view1}).when('hash2',{controller:'someController2',templateUrl:'path/to/view2'})....when().otherwise({redirectTo:'/'})
})
config方法传入一个函数,函数中传入参数"$routeProvider"作为服务.
$routeProvider.when(hash,obj)用于配置路由:
hash: 字符串格式. 匹配url的hash值,注意这里不要#, '/' 就表示hash值为空.
obj: 一个json对象,对象有以下这些属性:
controller: '控制器' : 字符串格式,定义控制ng-view元素的控制器
template: '视图模板' : 字符串格式,定义ng-view元素下应该使用哪个视图模板来填充内容,写的是视图模板的路径
redirectTo: '路径' : 字符串格式,定义重定向到哪里,注意定义的也是hash值
$routeProvider.otherwise()用于当没有匹配到任何路由的时候执行的内容:
参数和when的第二个参数用法一致
⑤.$routeParams服务:
关于服务的概念,可以参考这篇:http://www.cnblogs.com/liulangmao/p/3727808.html
$routeParems可以获取到一个参数化的url组件.这个组件比较复杂,单就这个例子来看,我们在配置路由的时候在when的url属性传入了/view/:id作为匹配,这样,就会把'view/'后面的内容,作为$routeParems对象的id属性值
angular学习笔记(十七)-路由和切换视图的更多相关文章
- Ionic学习笔记4_ionic路由(页面切换)
1.1. ionic路由机制: 状态 1.2. ion-nav-view <body ng-controller="firstCtrl"> <a class= ...
- Angular 学习笔记 (路由外传 - RouteReuseStrategy)
refer : https://github.com/angular/angular/issues/10929 https://stackoverflow.com/questions/41280471 ...
- angular学习笔记(三十一)-$location(2)
之前已经介绍了$location服务的基本用法:angular学习笔记(三十一)-$location(1). 这篇是上一篇的进阶,介绍$location的配置,兼容各版本浏览器,等. *注意,这里介绍 ...
- angular学习笔记(三十一)-$location(1)
本篇介绍angular中的$location服务的基本用法,下一篇介绍它的复杂的用法. $location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录. 一. 获取url的 ...
- angular学习笔记(三十)-指令(6)-transclude()方法(又称linker()方法)-模拟ng-repeat指令
在angular学习笔记(三十)-指令(4)-transclude文章的末尾提到了,如果在指令中需要反复使用被嵌套的那一坨,需要使用transclude()方法. 在angular学习笔记(三十)-指 ...
- angular学习笔记(三十)-指令(5)-link
这篇主要介绍angular指令中的link属性: link:function(scope,iEle,iAttrs,ctrl,linker){ .... } link属性值为一个函数,这个函数有五个参数 ...
- angular学习笔记(三十)-指令(2)-restrice,replace,template
本篇主要讲解指令中的 restrict属性, replace属性, template属性 这三个属性 一. restrict: 字符串.定义指令在视图中的使用方式,一共有四种使用方式: 1. 元素: ...
- SpringBoot学习笔记:动态数据源切换
SpringBoot学习笔记:动态数据源切换 数据源 Java的javax.sql.DataSource接口提供了一种处理数据库连接的标准方法.通常,DataSource使用URL和一些凭据来建立数据 ...
- python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容
python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...
随机推荐
- Java从零开始学四十一(反射简述二)
一.实例化Class类对象 实例化Class类对象的方法有三种: 第一种:通过forName()方法 第二种:类.class 第三种:对象.getClass() 二.Class类的常用方法 No. 方 ...
- HDUOj Ignatius and the Princess III 题目1002
母函数 组合数学 #include<stdio.h> int c1[125]; int c2[125]; int main() { int n,i,j,k; while(scanf ...
- java指令备忘
javap 查看class文件用 指令码 助记符 说明 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 ...
- 在Ubuntu下设置默认编辑器
在默认情况下,Ubuntu 系统会为用户预设程序.就拿文本编辑器来说吧,Ubuntu 预设的是 Nano,对某些朋友来说,使用 Vim 可能更得心应手些.那么如何更改这些预设的程序呢? 你可以使用 s ...
- spring注解配置quartz
常规配置quartz可以参考我的另外一篇博文:http://www.cnblogs.com/yangzhilong/p/3349116.html spring配置文件里增加: 命令空间: http:/ ...
- java SequenceInputStream类(序列输入流)的用法示例
public class SequenceInputStreamextends InputStream SequenceInputStream 表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从 ...
- HTTP 304状态分析
在看http log日志发现很多304状态的标识 HTTP 304: Not Modified ###请求后读取本地缓存的文件标准解释是:Not Modified 客户端有缓冲的文档并发出了 ...
- 使用SafeIP隐藏自己的IP
资料:http://www.cnblogs.com/KeenLeung/p/3482241.html 1.到网上下载SafeIP这个工具,安装,打开 2.选择自己熟悉的语言: 3.到www.ip138 ...
- 在程序开发中怎样写SQL语句可以提高数据库的性能
以下内容是公司dba总结. 1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来 ...
- 简单的WPS二次开发脚本
详细信息见:http://bbs.wps.cn/thread-22427301-1-1.html 下载:WPS2013专业版:WPS2013Pro_normal.exe 调用脚本(xl.vbs)内容如 ...