`
郑云飞
  • 浏览: 795345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AngularJS路由和模板

 
阅读更多

本文将介绍如何用angularjs构建一个强大的web前端系统。angularjs是由Google团队开发的一款非常优秀web前端框架。在当前如此多的web框架下,angularjs能脱颖而出,从架构设计上就高人一等,双向数据绑定,依赖注入,指令,MVC,模板。Angular.js创新地把后台技术融入前端开发,扫去jQuery一度的光芒。用angularjs就像写后台代码,更规范,更结构化,更可控。

关于作者

  • 郑云飞(Tianfang), 程序员Java
  • weibo:@Tianfang
  • blog: http://zhengyunfei.iteye.com
  • email: bsspirit@gmail.com

 

AngularJS-route

前言

如果想开发一款类似gmail的web应用,我们怎么做呢?

以jQuery的思路,做响应式的架构设计时,我们要监听所有点击事件,通过事件函数触发我们加载数据,提交,弹框,验证等的功能;以 AngularJS的思路,做声明式的架构设计时,我们通过指令和路由先设定好,什么样的操作干什么事情,等事件发生时,程序就会知道该干什么了。

今天说一下,AngularJS是如何实现前端路由功能的!

目录

  1. AngularJS路由介绍
  2. 路由的代码实现
  3. 实现效果截图

1. AngularJS路由介绍

AngularJS路由功能是一个纯前端的解决方案,与我们熟悉的后台路由不太一样。后台路由,通过不同的URL会路由到不同的控制器上(controller),再渲染(render)到页面(HTML)。AngularJS的前端路由,需求提前对指定的(ng-app),定义路由规则(routeProvider),然后通过不同的URL,告诉(ng-app)加载哪个页面(HTML),再渲染到(ng-app)视图(ng-view)中。

AngularJS的前端路由,虽然URL输入不一样,页面展示不一样,其实完成的单页(ng-app)视图(ng-view)的局部刷新。这样来看,AngularJS做单页应用就有点标配的感觉了。

从这个角度想想,要实现一个gmail的应用,真的就不难了。

2. 路由的代码实现

理论不多说了,直接上代码!! 还是基于我们之前用yeoman构建的项目

业务场景:论坛功能,帖子列表页(list.html) 和 帖子内容页(detail.html)。

代码文件:

  • 1. 增加:app/demo-route.html
  • 2. 增加:app/views/route/list.html
  • 3. 增加:app/views/route/detail.html
  • 4. 修改: app/scripts/app.js
  • 5. 修改: app/scripts/controllers/main.js

1). 增加:app/demo-route.html
这个文件是主页面(ng-app),包含视图(ng-view)

<!doctype html>
<head>
<meta charset="utf-8">
<title>route</title>
</head>
<body ng-app="routeApp">
<h1>Route Demo index</h1>

<div ng-view></div>

<script src="bower_components/angular/angular.js"></script>
<script src="scripts/app.js"></script>
<script src="scripts/controllers/main.js"></script>
</body>
</html>

2). 增加:app/views/route/list.html
这个页面是布局模板,是HTML的代码片段。包括了一组ID的列表,通过ID列表的链接,可以进入到ID的详细页面。


<hr/>
<h3>Route : List.html</h3>

<ul>
<li ng-repeat="id in [1, 2, 3 ]">
<a href="#/list/{{ id }}"> ID{{ id }}</a>
</li>
</ul>

3). 增加:app/views/route/detail.html
这个页面是布局模板,是HTML的代码片段。通过ID访问,包含ID号, (ID的文章内容)


<hr/>
<h3>Route <span style="color: red;">{{id}}</span>: detail.html </h3>

4). 修改: app/scripts/app.js
这个是ng-app文件的定义,我们在demo-route.html中定义了routeApp,在这里需要声明。


var routeApp = angular.module('routeApp',[]);
routeApp.config(['$routeProvider',function ($routeProvider) {
      $routeProvider
      .when('/list', {
        templateUrl: 'views/route/list.html',
        controller: 'RouteListCtl'
      })
      .when('/list/:id', {
          templateUrl: 'views/route/detail.html',
          controller: 'RouteDetailCtl'
      })
      .otherwise({
        redirectTo: '/list'
      });
}]);

在routeApp模块中,我们定义了路由和布局模板。routeApp的默认URL是/list,即http://localhost:9000/demo-route.html#/list。 跳转详细页的路由是/list/:id,id为参数。

同时,/list的布局模板是views/route/list.html,属于RouteListCtl的控制器管理空间。

5). 修改: app/scripts/controllers/main.js
这个文件定义控制器controller。


routeApp.controller('RouteListCtl',function($scope) {
});
routeApp.controller('RouteDetailCtl',function($scope, $routeParams) {
    $scope.id = $routeParams.id;
});

分别对应该路由中的两个控制器声明。

程序写好,我们打开浏览器看效果。

3. 实现效果截图

别忘了用下面命令,启动程序。

grunt server

浏览器被自动打开,默认出的是http://localhost:9000/demo-route.html#/list, “#/list”是被redirectTo转向的结果。

AngularJS-route1

点击ID2的链接。

AngularJS-route2

页面被刷新了,出了detil的页面。同时,我们注意观察,页面没有整个刷新,而在视图中(ng-view)做的局部刷新。因为,chrome的开发工具的监控中,只是看到detail.html被加载。

我们再浏览地址栏中,输入212

http://localhost:9000/demo-route.html#/list/212

AngularJS-route3

观察chrome的开发工具的监控中,没有任何的networking操作。

在浏览地址栏中,再输入原来list的地址

http://localhost:9000/demo-route.html#/list

观察chrome的开发工具的监控,确认没有任何变化!!

从这个实验,我们看到AngularJS纯前端路由的实现思路,配合视图的局部刷新,把业务功能切片后分散到HTML的模板页面中。非常容易地实现了widget。并且,这种widget可重用性会非常高,能大大减少前端代码量。

后端组件化开发思路,流畅的嵌入前端。爽死啦!!!

分享到:
评论

相关推荐

    AngularJS 路由和模板实例及路由地址简化方法(必看)

    下面小编就为大家带来一篇AngularJS 路由和模板实例及路由地址简化方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    AngularJS去掉的URL里的#号

    使用AngularJS的朋友都应该了解,AngularJS框架定义了自己的前端路由控制器,通过不同URL实现单面(ng-app)对视图(ng-view)的部署刷新,并支持HTML5的历史记录功能,详细介绍可以参考文章:AngularJS路由和模板。...

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

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

    AngularJS路由切换实现方法分析

    本文实例讲述了AngularJS路由切换实现方法。分享给大家供大家参考,具体如下: 之前有在服务器端接触到angular路由切换,今天想在本地实现路由,捣鼓半天终于成功了,特把步骤整理分享下,免得大家走弯路! 1.首先...

    angularjs-routing:简单的angular.js路由脚本

    AngularJS路由和模板化简单的angular.js路由脚本点击此链接观看演示

    Angularjs实现页面模板清除的方法

     模板缓存的清除包括传统的 HTML标签设置清除缓存,以及angularJs的一些配置清除,和angularJs的路由切换清除 1、以下是传统的清除浏览器的方法  HTMLmeta标签设置清除缓存 &lt;!-- 清除缓存 --&gt; &lt;meta ...

    最新AngularJS开发宝典视频教程 后盾网AngularJS培训视频教程 后盾网.txt

    ├最新AngularJS开发宝典—第076讲 uiRouter路由模板设置方式实例.mp4 ├最新AngularJS开发宝典—第077讲 uiRouter路由控制器使用方式详解.mp4 ├最新AngularJS开发宝典—第078讲 uiRouter路由控制器或指令中执行...

    angular-state-router:StateRouter是基于AngularJS状态的路由器,旨在实现灵活性和易用性

    状态路由器 一种基于AngularJS状态的路由器,旨在实现灵活性和易用性。 设计为与组件进行模块化集成时使用: 为嵌套视图管理提供模板支持轻巧灵活的AngularJS延迟加载方案。 虽然不是必需的,但StateRouter最初是...

    AngularJs权威教程

    本书是资深全栈工程师的代表性著作,由拥有丰富..., 双向数据绑定, 依赖注入, 作用域, 控制器, 路由, 客户端模板, 服务, 通过XHR实现动态内容, 测试, 过滤器, 定制表单验证, 深度测试, 定制指令, 专业工具, 对IE的支持

    精通AngularJS part1

    Pawel是自由和开源软件的坚定支持者,他在AngularJS 社区非常活跃,为AngularJS项目贡献了大量的代码。他也对Angular UI (AngularJS的配套框架)有所贡献,并为AngularJS 提供了Twitter Bootstrap 相关的指令...

    ng-route1:AngularJS 实验性页面路由模板

    ng-route1 AngularJS 实验性页面路由/模板演示视频: : 更多信息即将推出

    angular-crud-seed:AngularJS CRUD 简单种子。 包括服务、控制器、路由和模板

    包括服务、控制器、路由和模板。 ##快速开始将此存储库克隆到您的应用程序组件目录中: app/components/ ResourceAPIPath git clone ...

    angularjs权威教程

    本书是资深全栈工程师的代表性著作,由拥有丰富..., 双向数据绑定, 依赖注入, 作用域, 控制器, 路由, 客户端模板, 服务, 通过XHR实现动态内容, 测试, 过滤器, 定制表单验证, 深度测试, 定制指令, 专业工具, 对IE的支持

    angularjs-navigation-master-detail:带有主从列表的 AngularJS 导航示例

    此示例演示了以下内容: 使用路由模块 (ngRoute) 和部分页面的多页面应用程序的 AngularJS 路由。 MVC 设计使用 AngularJS 控制器 (ngController) 和 AngularJS 模板。 数据绑定 (ngModel)。 灵活的 UI 设计技术

    AngularJS通过ng-route实现基本的路由功能实例详解

    本文实例讲述了AngularJS通过ng-route实现基本的路由功能。分享给大家供大家参考,具体如下: 为什么需要前端路由~ (1)AJAX不会留下History历史记录 (2)用户无法通过URL进入应用指定的页面(书签或者分享等) ...

    Angular 路由route实例代码

    AngularJS的做法是将视图分解成布局和模板视图,并且根据用户当前访问的URL来展示对应的视图。 本文对 AngularJS routing 做一简单示例,并提及其涉及的一些概念。 一、布局页面 引用scripts: [removed][removed]...

    speedseed-styleguide-angularjs:AngularJS 风格指南

    AngularJS 风格指南指数模块化启动逻辑角度包装服务 $ 测试动画注释常数模板和片段路由任务自动化 开始 有关 jade、stylus 和 js (es6) + 使用 gulp 启动项目的模板的参考指南: ... - ...

    AngularJS入门教程之路由与多视图详解

    在这一步,你将学习如何创建一个布局模板并且通过...多视图,路由和布局模板 我们的应用正慢慢发展起来并且变得逐渐复杂。在步骤7之前,应用只给我们的用户提供了一个简单的界面(一张所有手机的列表),并且所有的模板

    简单讲解AngularJS的Routing路由的定义与使用

    通过ng-include指令我们可以把很多的模板整合在视图中,但是我们有更好的方法来处理这种情况,我们可以把视图打散成layout和模板视图,然后根据用户访问的特定的URL来显示需要的视图 我们可以将这些“碎片”在一个...

Global site tag (gtag.js) - Google Analytics