`

AngularJS中使用路由和$location切换视图

阅读更多

        虽然从技术上来说Ajax应用确实是单页面应用(即在第一个请求时加载一个HTML页面,后面只刷新DOM中的局部区域),但是很多时候,出于各种原因,我们需要为用户展示或者隐藏一些子页面的视图。

        我们可以利用Angular的$route服务来管理这种场景。可以使用路由服务这样定义:对于浏览器所指向的特定URL,Angular将会加载并显示一个模板,并实例化一个控制器来为模板提供内容。

        在应用中,可以通过调用$routeProvider服务上的函数来创建路由,把需要创建的路由当成一个配置块传给这些函数即可。

        下面我们将这一技术投入应用,构建一款email应用,会有一个首页视图,里面将会展示邮件列表,其中带有日期、标题和发件人。当点击一份邮件时,将会打开一个新视图来展示邮件内容。

         在主模板中,我们不会把所有东西都放在第一个加载的页面中,而是仅仅创建一个布局模板,然后再用这个模板来容纳各种视图。在主视图中,我们将会把多个视图共有的东西都放在里面,例如菜单。在这个例子中,我们仅仅把应用的标题放在里面,然后再用ng-view指令来告诉Angular把视图显示在哪。

index.html

<html ng-app="AMail">
	<head>
		<script src="lib/angular/angular.js"></script>
		<script src="controller/controllers.js"></script>
	</head>
	<body>
		<h1>A-Mail</h1>
		<div ng-view></div>
	</body>
</html>

list.html

        注意这里,我们想实现用户点击一个主题就能被导航到相应的邮件中。我们已经在URL和message.id之间进行了数据绑定,所以用户点击id=1的邮件就会被导航到/#/view/1。这种根据URL导航的方式也叫做深度连接,我们将会在邮件详细视图控制器中使用,以实现把一份可用的邮件链接到对应的说细视图上。

<table>
	<tr>
		<td><strong>Sender</strong></td>
		<td><strong>Subject</strong></td>
		<td><strong>Date</strong></td>
	</tr>
	<tr ng-repeat='message in messages'>
		<td>{{message.sender}}</td>
		<td><a href='#/view/{{message.id}}'>{{message.subject}}</td>
		<td>{{message.date}}</td>
	</tr>
</table>

detail.html

<div><strong>Subject:</strong>{{message.subject}}</div>
<div><strong>Sender:</strong>{{message.sender}}</div>
<div><strong>Date:</strong>{{message.date}}</div>
<div>
	<strong>To:</strong>
	<span ng-repeat='recipient in message.recipients'>{{recipient}}</span>
	<div>{{message.message}}</div>
</div>
<a href='#/'>Back to message list</a>

controllers.js

        为了把这些模板关联到对应控制器上,我们将给$routeProvider配置一个URL,$routeProvider将会负责调用控制器和模板。

//为核心的AMail服务创建模块
var aMailServices = angular.module('AMail', []);

//在URL、模板和控制器之间建立映射关系
function emailRouteConfig($routeProvider) {
	$routeProvider.when('/', {controller: ListController,templateUrl:'list.html'})
			//注意,为了创建详情视图,我们在id前面加了一个冒号,从而指定了一个参数化的URL组件
			.when('/view/:id', {controller: DetailController, templateUrl:'detail.html'})
			.otherwise({redirectTo: '/'});
}
	
//配置我们的路由,以便AMail服务能够找到它
aMailServices.config(emailRouteConfig);

//一些虚拟的邮件
messages = [{id:0,sender:'jean@somecompany.com',subject:'Hi there,old firend',date:'Dec 7,2013 12:32:00',recipients:['greg@somecompany.com'],
	message:'Hey,we should get together fo lunch sometime and catch up.There are many things we should collaborate on this year.'},
            {id:1,sender:'maria@somecompany.com',subject:'Where did you leavemy laptop?',date:'Dec 7,2013 8:15:12',recipients:['greg@somecompany.com'],
		message:'I thought you were going to put it in my desk drawer.But it does not seem to be there.'},
            {id:2,sender:'bill@somecompany.com',subject:'Lost python',date:'Dec 6,2013 20:35:02',recipients:['greg@somecompany.com'],
		message:'She doesn\'t move too fast,so just call me if you see her.'}];

//把我们的邮件发布给邮件列表模板
function ListController($scope) {
	$scope.messages = messages;
}

//从路由信息(从URL中解析出来的)中获取邮件id,然后用它找到正确的邮件对象
function DetailController($scope, $routeParams) {
	$scope.message = messages[$routeParams.id];
}

工程结构如下图所示:


运行结果:


点击邮件的Subject超链接,即进入相应的邮件详细信息页面,如下所示:

 

资料来源:《用AngularJS开发下一代Web应用》

  • 大小: 16.4 KB
  • 大小: 27 KB
  • 大小: 29.8 KB
分享到:
评论

相关推荐

    angular中使用路由和$location切换视图

    主要介绍了angular中使用路由和$location切换视图,需要的朋友可以参考下

    AngularJS实现使用路由切换视图的方法

    本文实例讲述了AngularJS实现使用路由切换视图的方法。分享给大家供大家参考,具体如下: 下面是一个简单的学生信息管理实例。 注意:除了引用angular.js之外,还要引用angular-route.js。 1、创建index.html主视图 ...

    AngularJS入门教程07:路由与多视图

    在这一步,你将学习如何创建一个布局模板并且通过路由功能来构建一个具有多个视图的应用。 AngularJS初学者看到中文入门教程,却无法使用GitHub下载到配套的Angular的Seed工程,因此学习曲线大。在此专门下载配套...

    ui-router, 在AngularJS中,使用嵌套视图实现灵活路由的实际解决方案.zip

    ui-router, 在AngularJS中,使用嵌套视图实现灵活路由的实际解决方案 AngularUI路由器 注意:这是用户界面路由器版本1的Angular 1.x 源。 如果你正在寻找路由器版本 0.2的源,那么可以在这里找到它:。 Angular 中...

    AngularJS ui-router(嵌套路由)

    AngularJS 嵌套路由:这是我针对同一个主题(ui-router)的第二篇文章. 如果你对第一篇文章感兴趣的话,可以... ui-router提供了让我们可以做路由嵌套和视图命名的特性. 我们将在示例中看到ui-router中存在的所有类型.

    angularjs路由传值$routeParams详解

    主要为大家详细介绍了angularjs路由传值$routeParams的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    angularjs ui.router嵌套路由demo

    本解决方案下的ui.router项目是针对angularjs ui.router嵌套路由做的一个demo,程序代码采用VS2013开发,代码齐全,可直接运行。有需要的带走吧~v~v~

    AngularJS 路由route 0217Demo

    AngularJS 路由route 0217Demo

    angularjs路由

    一个简单的Angularjs路由器的demo

    angularJS route路由demo

    angularJS route路由demo

    AngularJs中$cookies简单用法分析

    本文实例讲述了AngularJs中$cookies简单用法。分享给大家供大家参考,具体如下: 首先导入angular-cookies.js 在App 中require模块ngCookies: angular.module("app",['ngCookies']); 使用格式:$cookies.变量名 = ...

    AngularJS 路由

    AngularJS 路由

    AngularJS监听路由的变化示例代码

    【一】Angular 路由状态发生改变时可以通过’ $stateChangeStart ‘、’ $stateChangeSuccess ‘、’ $stateChangeError ‘监听,通过注入’$location’实现状态的管理 代码示例如下: function run($...

    AngularJS入门教程二:在路由中传递参数的方法分析

    本文实例讲述了AngularJS在路由中传递参数的方法。分享给大家供大家参考,具体如下: 我们不仅可以在控制器中直接定义属性的值,比如: app.controller('listController',function($scope){ $scope.name="ROSE"; })...

    AngularJS路由切换实现方法分析

    主要介绍了AngularJS路由切换实现方法,结合具体实例形式分析了AngularJS路由切换的实现步骤与相关操作技巧,需要的朋友可以参考下

    AngularJS中的路由使用及实现代码

    本篇文章主要介绍了AngularJS中的路由使用及实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    angularjs渲染bootstraps实现tab页切页面不刷新换使用ui-router-tabs插件

    项目使用 angularJS ui-router-tabs angular-ui-router 实现tab页切换, 1、亮点 1)tab页间切换缓存tab页数据 2)刷新页面,保留已经打开的tab页,当前活动tab为上次活动的tab 3)使用嵌套路由,实现单页面应用

    AngularJS 路由详解和简单实例

    AngularJS 路由 本章节我们将为大家介绍 AngularJS 路由。 AngularJS 路由允许我们通过不同的 URL 访问不同的内容。 通过 AngularJS 可以实现多视图的单页Web应用(single page web application,SPA)。 通常...

Global site tag (gtag.js) - Google Analytics