AngularJs路由

一个应用是由若个视图组合而成的,根据不同的业务逻辑展示给用户不同的视图,路由则是实现这一功能的关键。

  • 路由

在后端开发中通过URL地址可以实现页面(视图)的切换,但是AngularJS是一个纯前端MVC框架,在开发单页面应用时,所有功能都在同一页面完成,所以无需切换URL地址(即不允许产生跳转),但Web应用中又经常通过链接(a标签)来更新页面(视图),当点击链接时还要阻止其向服务器发起请求,通过锚点(页内跳转)可以实现这一点。
实现单页面应用需要具备:
a、只有一页面
b、链接使用锚点
在单一页面中可以能过hashchange事件监听到锚点的变化,进而可以实现为不同的锚点准不同的视图,单页面应用就是基于这一原理实现的。而在AngularJS中对这一实现原理进行了封装,将锚点的变化封装成路由(Route),这是与后端路由的根本区别。

  • 使用

1、引入angular-route.js

<!--引入angularjs核心库-->
<script src="js/angular.min.js"></script>
<!--引入angularjs路由模块-->
<script src="js/angular-route.js"></script>

2、实例化模块(App)时,当成依赖传进去(模块名称叫ngRoute)。

//作为依赖传入
 var App = angular.module('App',['ngRoute']);

3、配置路由模块

App.config(['$routeProvider',function ($routeProvider) {
            $routeProvider.when('/index',{
                template:'<h1>这是index页面!!!!!</h1>'
//                templateUrl:'index.html'
            })
            .when('/book',{
                template:'<h1>这是book页面!!!!!</h1>'
            })
            .when('/collect',{
                template:'<h1>这是collect页面!!!!!</h1>'
            })
            .when('/home',{
                template:'<h1>这是home页面!!!!!</h1>'
            })
            .otherwise({
                redirectTo:'/index'
        })
    }])

在这里通过调用config方法配置路由,里面有两个参数,第一个参数为所要配置的服务,第二个参数为一个对象,配置当前路由的参数,如视图、控制器等,其中template就是字符串形式的视图模板,打印出一些内容,这个参数还可以是templateUrl,这样就会定位到外部文件。如果这个参数为 controller,就要结合控制器来使用, 这里的$routeProvider.when就相当于switch... case...语句,就是当锚点后面的值满足什么时会在当前显示什么内容,otherwise方法就是在不做任何点击操作时,所显示的内容。
4、布局模板
通过ng-view指令布局模板,路由匹配的视图会被加载渲染到些区域。

<ul class="list">
    <li><a href="#/index">index</a></li>
    <li><a href="#/book">book</a></li>
    <li><a href="#/collect">collect</a></li>
    <li><a href="#/home">home</a></li>
</ul>
<div class="content">
    <!--视图会被加载并渲染到此处-->
    <div ng-view=""></div>
</div>

Paste_Image.png

当配置路由其中有个参数是controller的时候,要依赖控制器,代码如下:

 App.config(['$routeProvider',function ($routeProvider) {
            $routeProvider.when('/index',{
              //定位到abc.html,使用控制器
                templateUrl:'abc.html',
                controller:'demoController'
            })
            .when('/book',{
                template:'<h1>这是book页面!!!!!</h1>'
            })
            .when('/collect',{
                template:'<h1>这是collect页面!!!!!</h1>'
            })
            .when('/home',{
                template:'<h1>这是home页面!!!!!</h1>'
            })
            .otherwise({
                redirectTo:'/index'
        })
    }])
  App.controller('demoController',['$scope','$http','$routeParams', function ($scope,$http,$routeParams) {
        $scope.content = "正在学习AngularJs路由;"
    }])

abc.html中代码:

<body>
<div>{{content}}</div>
</body>
Paste_Image.png
  • 路由参数

1、提供两个方法匹配路由,分别是whenotherwisewhen方法需要两个参数,otherwise方法做为when方法的补充只需要一个参数,其中when方法可以被多次调用。
2、第1个参数是一个字符串,代表当前URL中的hash值。
3、第2个参数是一个对象,配置当前路由的参数,如视图、控制器等。
a)、template 字符串形式的视图模板
b)、templateUrl 引入外部视图模板
c)、controller 视图模板所属的控制器
d)、redirectTo跳转到其它路由,只能在otherwise方法中使用
4、获取参数,在控制中注入$routeParams可以获取传递的参数

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • 转自 http://blog.gejiawen.com/2015/12/15/routes-solution-on...
    文刂德光军阅读 1,319评论 0 2
  • jQuery源码分析系列JS的模块化 最近在使用kendo ui的时候遇到一些问题,有一个需求是希望在打开LOV组...
    spilledyear阅读 1,069评论 0 3
  • 1、首先我们要引进angular.js和angular-route.js文件 2、然后我们要在html中创建锚点和...
    Victor细节阅读 1,181评论 2 4
  • 一、介绍 AngularJS是一款由Google公司开发维护的前端MVC框架,其克服了HTML在构建应用上的诸多不...
    福尔摩鸡阅读 750评论 0 2
  • 日暮苍天晚 霞落云缭乱 一点星光出 晚来始思禅
    耘心阅读 326评论 0 0