AngularJS路由系列(1)--基本路由配置

本系列探寻AngularJS的路由机制,在WebStorm下开发。主要包括:

● 路由的Big Picture

● $routeProvider配置路由

● 使用template属性

● 使用templateUrl属性

● redirectTo属性,接受字符串

● redirectTo属性,接受函数

● 使用caseInsensitiveMatch属性,禁止大小写敏感

● 使用otherwise属性

项目文件结构

node_modules/
public/
.....app/
..........bower_components/
...............toastr/
....................toastr.min.css
....................toastr.min.js
...............jquery/
....................dist/
.........................jquery.min.js
...............angular/
....................angular.min.js
...............angular-ui-router/
....................release/
.........................angular-ui-router.min.js
...............angular-route/
.........................angular-route.min.js
..........controllers/
...............HomeController.js
...............AllSchoolsController.js
...............AllClassroomsController.js
...............AllActivityiesController.js
...............ClassroomController.js
...............ClassroomSummaryController.js
...............ClassroomMessageController.js
..........css/
...............bootstrap.cerulean.min.css
..........filters/
...............activityMonthFilter.js
..........services/
...............dataServices.js
...............notifier.js
..........templates/
...............home.html
...............allSchools.html
...............allClassrooms.html
...............allActivities.html
...............classroom.html
...............classroomDetail.html
...............classroom_parent.html
..........app.js
.....index.html
.....favicon.ico
server/
.....data/
.....routes/
.....views/
.....helpers.js
package.json
server.js

安装Web Server

node server.js
Listening on port:3000

访问路径:localhost:3000/#/

获取ngRoute模块

bower install angular-route#1.4.0

npm install [email protected]

http://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-route.js

https://code/angularjs.org/1.4.0/angular-route.js

如何使用呢?

在项目中引用angular-route.js,设置对ngRoute这个module的依赖(var app = angular.module(‘app‘,[‘ngRoute‘])),在视图中添加ng-view这个directive(<div ng-view></div>)。

Big Picture

在了解路由之前,有必要知道路由在整个AnuglarJS中所扮演的角色,如下:

$routeProvider配置路由

大致按如下配置:

(function(){
    var app = angular.module(‘app‘,[‘ngRoute‘]);
    app.config([‘$routeProvider‘, function($routeProvider){
        $routeProvider
            .when(‘/‘,{
                controller: ‘HomeController‘,
                contrllerAs: ‘home‘,
                templateUrl: ‘app/templates/home.html‘
            });
    }])
}());

■ index.html

bootstrap.cerulean.min.css
toastr.min.css

<!--Angular-->
angular.min.js
angular-route.min.js

<!--Application-->
app.js

<!--Services-->
dataServices.js
notifier.js

<!--Filters-->
activityMonthFilter.js

<!--Controls-->
HomeController.js
AllSchoolsController.js
AllClassroomsController.js
AllActivityiesController.js
ClassroomController.js
ClassroomSummaryController.js
ClassroomMessageController.js

<body ng-app="app">
    <a href="#/">School Buddy</a>

    <a href="#/schools">Schools</a>
    <a href="#/classrooms">Classrooms</a>
    <a href="#/activities">Activities</a>

    <div ng-view></div>
</body>

app.js,第一次添加路由,使用template属性

(function(){
    var app = angular.module(‘app‘, [‘ngRoute‘]);

    app.config([‘$logProvider‘,‘$routeProvider‘, function($logProvider,$routeProvider){
        $logProvider.debugEnabled(true);

        $routeProvider
            .when(‘/‘,{
                controller: ‘HomeController‘ ,
                controllerAs: ‘home‘,
                template: ‘<h1>This is an inline template</h1>‘
            });
    }]);
}());

app.js,使用templateUrl属性

(function(){
    var app = angular.module(‘app‘, [‘ngRoute‘]);

    app.config([‘$logProvider‘,‘$routeProvider‘, function($logProvider,$routeProvider){
        $logProvider.debugEnabled(true);

        $routeProvider
            .when(‘/‘,{
                controller: ‘HomeController‘ ,
                controllerAs: ‘home‘,
                templateUrl: ‘/app/templates/home.html‘
            });
    }]);
}());

■ home.html

{{home.message}}
{{home.schoolCount}}
{{home.activityCount}}

■ app.js,添加更多的路由

(function(){
    var app = angular.module(‘app‘, [‘ngRoute‘]);

    app.config([‘$logProvider‘,‘$routeProvider‘, function($logProvider,$routeProvider){
        $logProvider.debugEnabled(true);

        $routeProvider
            .when(‘/‘,{
                controller: ‘HomeController‘ ,
                controllerAs: ‘home‘,
                templateUrl: ‘/app/templates/home.html‘
            })
            .when(‘/schools‘,{
                controller: ‘AllSchoolsController‘,
                controllerAs: ‘schools‘,
                templateUrl: ‘/app/templates/allSchools.html‘
            })
            .when(‘/classrooms‘,{
                controller: ‘AllClassroomsController‘,
                controllerAs: ‘classrooms‘,
                templateUrl: ‘/app/templates/allClassrooms.html‘
            })
            .when(‘/activities‘,{
                controller: ‘AllActivitiesController‘,
                controllerAs: ‘activities‘,
                templateUrl: ‘/app/templates/allActivities.html‘
            });
    }]);
}());

点击导航栏上的Schools

点击导航栏上的Classrooms

点击导航栏上的Activities

app.js, 添加redirectTo属性,接受字符串

(function(){
    var app = angular.module(‘app‘, [‘ngRoute‘]);

    app.config([‘$logProvider‘,‘$routeProvider‘, function($logProvider,$routeProvider){
        $logProvider.debugEnabled(true);

        $routeProvider
            .when(‘/‘,{
                controller: ‘HomeController‘ ,
                controllerAs: ‘home‘,
                templateUrl: ‘/app/templates/home.html‘
            })
            .when(‘/schools‘,{
                controller: ‘AllSchoolsController‘,
                controllerAs: ‘schools‘,
                templateUrl: ‘/app/templates/allSchools.html‘
            })
            .when(‘/classrooms‘,{
                controller: ‘AllClassroomsController‘,
                controllerAs: ‘classrooms‘,
                templateUrl: ‘/app/templates/allClassrooms.html‘,
                redirectTo: ‘/schools‘
            })
            .when(‘/activities‘,{
                controller: ‘AllActivitiesController‘,
                controllerAs: ‘activities‘,
                templateUrl: ‘/app/templates/allActivities.html‘
            });
    }]);
}());

点击Classrooms导航到Schools下

app.js, 添加redirectTo,接受函数

(function(){
    var app = angular.module(‘app‘, [‘ngRoute‘]);

    app.config([‘$logProvider‘,‘$routeProvider‘, function($logProvider,$routeProvider){
        $logProvider.debugEnabled(true);

        $routeProvider
            .when(‘/‘,{
                controller: ‘HomeController‘ ,
                controllerAs: ‘home‘,
                templateUrl: ‘/app/templates/home.html‘
            })
            .when(‘/schools‘,{
                controller: ‘AllSchoolsController‘,
                controllerAs: ‘schools‘,
                templateUrl: ‘/app/templates/allSchools.html‘
            })
            .when(‘/classrooms/:id‘,{
                controller: ‘AllClassroomsController‘,
                controllerAs: ‘classrooms‘,
                templateUrl: ‘/app/templates/allClassrooms.html‘,
                redirectTo: function(params, currPath, currSearch){
                    console.log(params);
                    console.log(currPath);
                    console.log(currSearch);
                    return ‘/‘;
                }
            })
            .when(‘/activities‘,{
                controller: ‘AllActivitiesController‘,
                controllerAs: ‘activities‘,
                templateUrl: ‘/app/templates/allActivities.html‘
            });
    }]);
}());

在浏览器输入:localhost:3000/#/classrooms/1?foo=bar

可见,路由参数1被放在了params中,是一个object对象;/classrooms/1被放在了currPath中;foo=bar查询字符串被放在了currSearch中了,是一个object对象。

app.js, 禁止大小写敏感,使用caseInsensitiveMatch属性

(function(){
    var app = angular.module(‘app‘, [‘ngRoute‘]);

    app.config([‘$logProvider‘,‘$routeProvider‘, function($logProvider,$routeProvider){
        $logProvider.debugEnabled(true);

        $routeProvider
            .when(‘/‘,{
                controller: ‘HomeController‘ ,
                controllerAs: ‘home‘,
                templateUrl: ‘/app/templates/home.html‘
            })
            .when(‘/schools‘,{
                controller: ‘AllSchoolsController‘,
                controllerAs: ‘schools‘,
                templateUrl: ‘/app/templates/allSchools.html‘,
                caseInsensitiveMatch: true
            })
            .when(‘/classrooms/:id‘,{
                controller: ‘AllClassroomsController‘,
                controllerAs: ‘classrooms‘,
                templateUrl: ‘/app/templates/allClassrooms.html‘
            })
            .when(‘/activities‘,{
                controller: ‘AllActivitiesController‘,
                controllerAs: ‘activities‘,
                templateUrl: ‘/app/templates/allActivities.html‘
            });
    }]);
}());

localhost:3000/#/schools和localhost:3000/#/SCHOOLS能得到相同的结果。

app.js, 当用户输入的uri无效导航到默认页,使用otherwise属性

(function(){
    var app = angular.module(‘app‘, [‘ngRoute‘]);

    app.config([‘$logProvider‘,‘$routeProvider‘, function($logProvider,$routeProvider){
        $logProvider.debugEnabled(true);

        $routeProvider
            .when(‘/‘,{
                controller: ‘HomeController‘ ,
                controllerAs: ‘home‘,
                templateUrl: ‘/app/templates/home.html‘
            })
            .when(‘/schools‘,{
                controller: ‘AllSchoolsController‘,
                controllerAs: ‘schools‘,
                templateUrl: ‘/app/templates/allSchools.html‘,
                caseInsensitiveMatch: true
            })
            .when(‘/classrooms/:id‘,{
                controller: ‘AllClassroomsController‘,
                controllerAs: ‘classrooms‘,
                templateUrl: ‘/app/templates/allClassrooms.html‘
            })
            .when(‘/activities‘,{
                controller: ‘AllActivitiesController‘,
                controllerAs: ‘activities‘,
                templateUrl: ‘/app/templates/allActivities.html‘
            })
            .otherwise(‘/‘);
    }]);
}());

未完待续~~

时间: 2024-10-06 18:30:30

AngularJS路由系列(1)--基本路由配置的相关文章

AngularJS路由系列(6)-- UI-Router的嵌套State

本系列探寻AngularJS的路由机制,在WebStorm下开发.本篇主要涉及UI-Route的嵌套State. 假设一个主视图上有两个部分视图,部分视图1和部分视图2,主视图对应着一个state,两个部分视图分别对应state1和state2,那state与state1和state2形成了嵌套关系. AngularJS路由系列包括: 1.AngularJS路由系列(1)--基本路由配置2.AngularJS路由系列(2)--刷新.查看路由,路由事件和URL格式,获取路由参数,路由的Resolv

AngularJS路由系列(5)-- UI-Router的路由约束、Resolve属性、路由附加数据、路由进入退出事件

本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● UI-Router约束路由参数● UI-Router的Resolve属性● UI-Router给路由附加数据● UI-Router的onEnter和onExit事件 AngularJS路由系列包括: 1.AngularJS路由系列(1)--基本路由配置2.AngularJS路由系列(2)--刷新.查看路由,路由事件和URL格式,获取路由参数,路由的Resolve3.AngularJS路由系列(3)-- UI-Rou

AngularJS路由系列(3)-- UI-Router初体验

本系列探寻AngularJS的路由机制,在WebStorm下开发. AngularJS路由系列包括: 1.AngularJS路由系列(1)--基本路由配置2.AngularJS路由系列(2)--刷新.查看路由,路由事件和URL格式,获取路由参数,路由的Resolve3.AngularJS路由系列(3)-- UI-Router初体验4.AngularJS路由系列(4)-- UI-Router的$state服务.路由事件.获取路由参数5.AngularJS路由系列(5)-- UI-Router的路由

AngularJS路由系列(2)--刷新、查看路由,路由事件和URL格式,获取路由参数,路由的Resolve

本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● 刷新路由● 查看当前路由以及所有路由● 路由触发事件● 获取路由参数 ● 路由的resolve属性● 路由URL格式 项目文件结构 node_modules/ public/.....app/..........bower_components/...............toastr/....................toastr.min.css....................toastr.min

2Python全栈之路系列之Django路由与视图

Python全栈之路系列之Django路由与视图 路由说白了就是与视图(函数)的对应关系,怎么说呢,一个路由对应一个视图,比如上面文章中所提到的那样,当打开/users/路径的时候会让users这个函数来进行逻辑处理,把处理的结果再返回到前端. 那么django是怎么知道从哪里找路由的配置文件入口呢?其实这在settings.py文件中已经被定义了: ROOT_URLCONF = 'ansheng.urls' 路由的配置 绝对地址访问 # 访问地址必须是http://127.0.0.1:8000

使用GNS3软件配置VTP、DHCP和单臂路由的详细截图和配置实验

使用软件GNS3配置VTP.DHCP和单臂路由的集体实验 首先创建拓扑图:红色字体是路由交换需要做的项目. SW1上的配置: 首先是trunk链路并做两条以太网通道.注意看是谁和谁捆绑在了一起!!!别搞错了哦! 然后配置SW1的VTP域和server(服务)模式 在fa1/0上面配置trunk模式(连接路由器的那个端口) 创建两个VLAN,让下面两个交换机自动学习 SW2上的配置: 首先配置的是VTP域和SW3一样都是配置了客户模式 给相应的端口配置trunk和以太网通道(注意以太网通道编号,要

第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置

第三百八十四节,Django+Xadmin打造上线标准的在线教育平台-路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, include # 导入django自在的include逻辑 from django.contrib import admin from django.views.generic import TemplateView # 导入django自带的TemplateView逻辑 import xadmin #

HCNA——IP路由原理、静态路由基本配置

HCNA--IP路由原理.静态路由基本配置 在互联网中进行路由选择所使用的设备,或者说,实现路由的设备,我们称之为路由器. 路由器关键功能 检查数据包的目的地 确定信息源 发现可能的路由 选择最佳路由 验证和维护路由信息 什么是路由? 路由是指导IP报文发送的路径信息 路由表 路由器工作时依赖于路由表进行数据的转发.路由表犹如一张地图,它包含着去往各个目的的路径信息(路由条目).每条信息至少应该包括下面3个内容: 目的网络--表明路由器可以到达的网络的地址,可理解为去哪里. 下一跳--通常情况下

vue路由的两种模式配置以及history模式下面后端如何配置

vue路由的两种模式配置以及history模式下面后端如何配置 1.hash ——即地址栏URL中的#符号.hash 虽然出现URL中,但不会被包含在HTTP请求中,对后端完全没有影响,因此改变hash不会重新加载页面.2.history ——利用了HTML5 History Interface 中新增的pushState() 和replaceState() 方法.需要特定浏览器支持history模式,会出现404 的情况,需要后台配置.3.hash模式下,仅hash符号之前的内容会被包含在请求