ngRoute 路由
做单页面应用多是通过不同的url来识别出不同的页面展现的。
angularjs 为我们提供一个封装好的ngRoute工具
简单介绍用法 :
<div ng-view></div>
界面上放入一个 ng-view指令,待会儿界面会刷新这个区域,它也支持动画,可以通过添加css在切换视图时做一些动画。
我们一段一段来看
var app = angular.module("Main", ['ngRoute']);
app.config(function ($locationProvider) {
$locationProvider.html5Mode(true); //最少要 ie10 才可以使用 html5mode 哦
//$locationProvider.html5Mode(false).hashPrefix("!");
});
记得要依赖 ngRoute 模块
我们通过 config 来设置 $location to html5Mode , default 是 hashbang
app.config(function ($routeProvider) {
$routeProvider.
when("/", {
template: '<div>product</div>',
controller: function () {
console.log("in product");
}
}).
when("/:category", {
templateUrl: function(routeParams){ //这里不是依赖注入哦
return '/' +
routeParams
},
controller: function ($routeParams) {
console.log("here");
console.log($routeParams);
}
}).
when("/:category/:code", {
template: '<div>category and code</div>',
controller: function ($routeParams) {
console.log($routeParams);
console.log("in product code size");
}
}).
otherwise({
redirectTo: '/'
});
});
通过 $routeProvider.when 和 otherwise 我们就可以设置我们的视图 template , controller 对应到哪个URL了
每当URL装换的时候,angular会帮我们匹配 (基本原理就是用了html history api)
这里URl的格式是正对文件folder路径的 ":" 符合代表它是个参数,我们只好通过 $routeParams可以一块捕获
我举个例子 :
我们访问这里 xx.com/folder1/index.aspx (文件正正的路径)
经过 redirectTo '/' 就变成了 xx.com 也就匹配了 when('/')设置
那我们访问 xx.com/category1?key=value
会对应到 "/:category" 的设置 , 它是通过folder的数量来做配对的 (params 将会是 category='category1' key=value)
那我们在访问 xx.com/man/mk100?key=value&key2=value2
会对应到 '/:category/:code'的设置 (params 是 category='man' code='mk100' key=value key2=value2)
angularjs 会依据模板和controller 绘画好视图后覆盖到ng-view中.
对应不支持htmlMode的朋友,可以使用hashbang mode , 其实差不了多少,只是难看一些罢了,还有后台比较难对 #! 做处理
这里举出这2个mode的区别
config 设置换成这样
$locationProvider.html5Mode(false).hashPrefix('!');
我们访问这里 xx.com/folder1/index.aspx (文件正正的路径)
经过 redirectTo '/' 就变成了 xx.com/forlder1/index.aspx#!/ 也就匹配了 when('/')设置
(它没有像html5那样把整个路径改了,而只是添加了hash在后面)
那我们访问 xx.com/forlder1/index.aspx#!/category1?key=value 会对应到 "/:category" 的设置
通过hash 访问,href="#!/.." 不能覆盖URL,只能在#hash之后添加东西。
其它的和html5其实是一样的。
小总结 : html5 会覆盖原路径,hash只是添加#! , html5 访问路径就像普通URL , hash 就是普通URL 加 #!
#! 在后台会被翻译成 ?key=value 的格式,这是协议,方便SEO蜘蛛。
ngRoute 路由的更多相关文章
- AngularJs ng-route路由详解
本篇基于ng-route来讲下路由的使用...其实主要是 $routeProvider 搭配 ng-view 实现. ng-view的实现原理,基本就是根据路由的切换,动态编译html模板. 更多内容 ...
- angular.js之路由的选择
在一个单页面中,我们可以添加多个模块,使得网页只在需要的时候加载这个模块.模块的切换大致上可以代替网页的切换,于是,我们便可以通过模块的切换实现网页的切换,这个切换是按需加载的. 乍一看非常普通的东西 ...
- Angular路由(三)
AngularJs ng-route路由详解 其实主要是$routeProvider搭配ng-view实现. ng-view的实现原理,基本就是根据路由的切换,动态编译html模板. 前提 首先必须在 ...
- 从零开始搭建口袋妖怪管理系统(2)-借助ngRoute实现详情页面跳转
一.目标 上一次我们用Angular1.x完成了简单的口袋妖怪展示列表页面,现在我们想要了解口袋妖怪更多的信息,但是发现原有单行表格可能容纳不下口袋妖怪的所有信息,所以现在我们需要一个口袋妖怪详情界面 ...
- ngRoute (angular-route.js) 和 ui-router (angular-ui-router.js) 模块有什么不同呢?
ngRoute (angular-route.js) 和 ui-router (angular-ui-router.js) 模块有什么不同呢? 很多文章中都有说道:当时ngRoute在路由配置时用$r ...
- angularjs路由监听,uirouter感知路由变化,解决uirouter路由监听不生效的问题
壹 ❀ 引 angularjs除了惊为天人的双向数据绑定外,路由也是出彩的一笔,通过路由配置,我们能在不发起页面跳转的情况下,对当前页内容进行整体更新,angularjs提供了ngRoute模块用于 ...
- AngularJS实例实战
学习了这么多天的AngularJS,今天想从实战的角度和大家分享一个简单的Demo--用户查询系统,以巩固之前所学知识.功能需求需要满足两点 1.查询所有用户信息,并在前端展示 2.根据id查询用户信 ...
- AngularJS之中级Route【二】(七)
前言 上一篇我们介绍了AngularJS内置的路由ngRoute,我们知道AngularJS被广泛应用于单页应用SPA(Single Page Application)中,此时路由对于我们来讲非常重要 ...
- angularJS获取json数据(实战)
学习了这么多天的AngularJS,今天想从实战的角度和大家分享一个简单的Demo--用户查询系统,以巩固之前所学知识.功能需求需要满足两点 1.查询所有用户信息,并在前端展示 2.根据id查询用户信 ...
随机推荐
- Hive从概念到安装使用总结
一.Hive的基本概念 1.1 hive是什么? (1)Hive是建立在hadoop数据仓库基础之上的一个基础架构: (2)相当于hadoop之上的一个客户端,可以用来存储.查询和分析存储在hadoo ...
- foreach as 和 in_array
1.$arr = array("one", "two", "three"); foreach ($arr as $value) { echo ...
- 适配ios7
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) { self.edgesForExtendedLayout = UIR ...
- 对不起,说句粗话——这个太屌了,windows1.0安装程序(附下载)
今天逛一个软件论坛发现的,仅仅有几百K.遥想当今我刚接触windows的版本号是3.1,当时记得非常清楚哦,进入windows要从dos命令行进入.如今一转眼,变成进入伪dos是执行栏里敲cmd了.唉 ...
- 静态代码检查工具 cppcheck 的使用
CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们 ...
- [转] vim 正则表达式 很强大
毋庸多言,在vim中正则表达式得到了十分广泛的应用. 最常用的 / 和 :s 命令中,正则表达式都是不可或缺的. 下面对vim中的正则表达式的一些难点进行说明. 关于magic vim中有个magic ...
- (转)SQL流程控制语句学习(一):变量及控制语句种类
1.局部变量 用户自己定义的,称局部变量,以@标识. 作用范围:定义局部变量的批处理.存储过程.触发器和语句块 局部变量的定义: declare @局部变量名 数据类型 注意:变量的类型不能是text ...
- sql 判断表、列、视图等是否存在
1 判断数据库是否存在 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名] 2 判 ...
- MySQL数据库my.cnf配置文件注释详解
我们知道,在MySQL数据库安装完成后,要对my.cnf配置文件进行适当的修改才能充分利用MySQL数据库的功能.但是对于初学者来说,修改my.cnf配置文件似乎是一个比较难的过程.为了解决这个问题, ...
- 使用VS2012的C++生成dll
1,首先,通过File->New Project的方式新建一个工程,打开"New Project"对话框. 2,选择Visual C++语言下的 Win32->Win3 ...