$stateProvider
在你的应用中大多数状态都有与其相关联的 url,路由控制不是设计完成 state 之后的事后想法,而是开始开发时就应该考虑的问题。
这里是如何设置一个基本url。
1 |
$stateProvider |
当我们访问index.html/contacts时, 'contacts'状态将被激活,同时index.html中的ui-view将被'contacts.html'填充。或者,通过transitionTo('contacts')方法将状态转变到'contacts'状态,同时 url 将更新为index.html/contacts。
URL参数
基本参数
通常,url动态部分被称为参数,有几个选项用于指定参数。基本参数如下:
1 |
$stateProvider |
或者,你也可以使用花括号的方式来指定参数:
1 |
// 与前面的设置方法等效 |
示例:
'/hello/'- 只匹配'/hello/'路径,没有对斜杠进行特殊处理,这种模式将匹配整个路径,而不仅仅是一个前缀。'/user/:id'- 匹配'/user/bob'、'/user/1234!!!',甚至还匹配'/user/',但是不匹配'/user'和'/user/bob/details'。第二个路径段将被捕获作为参数"id"。'/user/{id}'- 与前面的示例相同,但使用花括号语法。
含正则表达式的参数
使用花括号的方式可以设置一个正则表达式规则的参数:
1 |
// 只会匹配 contactId 为1到8位的数字 |
示例:
'/user/{id:[^/]*}'- 与'/user/{id}'相同'/user/{id:[0-9a-fA-F]{1,8}}'- 与前面的示例相似,但只匹配1到8为的数字和字符'/files/{path:.*}'- 匹配任何以'/files/'开始的URL路径,并且捕获剩余路径到参数'path'中。'/files/*path'- 与前面相同,捕获所有特殊的语法。
警告:不要把捕获圆括号写进正则表达式,ui-router 的 UrlMatcher 将为整个正则表达式添加捕获。
Query Parameters
可以通过?来指定参数作为查询参数
1 |
url: "/contacts?myParam" |
如果你需要不止一个查询参数,请用&分隔:
1 |
url: "/contacts?myParam1&myParam2" |
嵌套状态的路由控制
附加的方式(默认)
在嵌套状态的路由控制中,默认方式是子状态的 url 附加到父状态的 url 之后。
1 |
$stateProvider |
路由将成为:
'contacts'状态将匹配"/contacts"'contacts.list'状态将匹配"/contacts/list"。子状态的url是附在父状态的url之后的。
绝对路由(^)
如果你使用绝对 url 匹配的方式,那么你需要给你的url字符串加上特殊符号"^"。
1 |
$stateProvider |
路由将成为:
'contacts'状态将匹配"/contacts"'contacts.list'状态将匹配"/list"。子状态的url没有附在父状态的url之后的,因为使用了^。
$stateParams 服务
之前看到的$stateParams服务是一个对象,包含 url 中每个参数的键/值。$stateParams可以为控制器或者服务提供 url 的各个部分。
注意:$stateParams服务必须与一个控制器相关,并且$stateParams中的“键/值”也必须事先在那个控制器的url属性中有定义。
1 |
// 如果状态中 url 属性是: |
使用$stateParams的两个陷阱
- 只有当状态被激活并且状态的所有依赖项都被注入时,
$stateParams对象才存在。这代表你不能再状态的resolve函数中使用$stateParams对象,可以使用$state.current.params来代替。
1 |
$stateProvider.state('contacts.detail', {
|
- 在状态控制器中,
$stateParams对象只包含那些在状态中定义的参数,因此你不能访问在其他状态或者祖先状态中定义的参数。
1 |
$stateProvider.state('contacts.detail', {
|
$urlRouterProvider
$urlRouterProvider负责处理在状态配置中指定的url路由方式之外的 url 请求的路由方式。$urlRouterProvider负责监视$location,当$location改变后,$urlRouterProvider将从一个列表,一个接一个查找匹配项,直到找到。所有 url 都编译成一个UrlMatcher对象。
$urlRouterProvider有一些实用的方法,可以在module.config中直接使用。
when() for redirection 重定向
参数:
whatString | RegExp | UrlMatcher,你想重定向的传入路径handlerString | Function 将要重定向到的路径
handler 作为 String
如果handler是字符串,它被视为一个重定向,并且根据匹配语法决定重定向的地址。
1 |
app.config(function($urlRouterProvider){
|
handler 作为 Function
如果handler是一个函数,这个函数是注入一些服务的。如果$location匹配成功,函数将被调用。你可以选择性注入$match。
函数可以返回:
- falsy 表明规则不匹配,
$urlRouter将试图寻找另一个匹配 - String 该字符串作为重定向地址并且作为参数传递给
$location.url() - nothing或者任何为真的值,告诉
$urlRouterurl 已经被处理
示例:
1 |
$urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {
|
otherwise() 无效路由
参数:
pathString | Function 你想重定向url路径或者一个函数返回url路径。函数可以包含$injector和$location两个参数。
1 |
app.config(function($urlRouterProvider){
|
rule() 自定义url处理
参数:
handlerFunction 一个函数,包含$injector和$location两个服务作为参数,函数负责返回一个有效的路径的字符串。
1 |
app.config(function($urlRouterProvider){
|
$urlMatcherFactory 和 UrlMatchers
定义了url模式和参数占位符的语法。$urlMatcherFactory是在幕后被$urlRouterProvider调用,来缓存编译后的UrlMatcher对象,而不必在每次 location 改变后重新解析url。大多数用户不需要直接使用$urlMatcherFactory方法,但是在状态配置中非常实用,可以使用$urlMatcherFactory方法来生成一个UrlMatcher对象,并在状态配置中使用该对象。
1 |
var urlMatcher = $urlMatcherFactory.compile("/home/:id?param1");
|
随机推荐
- C#重写一个控件Label
1. 首先你把一个label控件拖到窗体上.2. 创建一个准备继承的类,比如叫LabelEx,派生于Label类 public class LabelEx : Label { //鼠标左键双击消息 p ...
- redis并发问题
redis中的并发问题 使用redis作为缓存已经很久了,redis是以单进程的形式运行的,命令是一个接着一个执行的,一直以为不会存在并发的问题,直到今天看到相关的资料,才恍然大悟~~ 具体问题实例 ...
- Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、
特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣) ...
- PHPCMS导航栏当前栏目选中方法
{if $top_parentid==0}<!--判断首页显示的是不是首页--> <li><a href="{siteurl($siteid)}" s ...
- C# 的TCP Socket (异步方式)
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- ECSHOP 商品字段增加新字段的方法
结合ecshop后台“商品编辑”.“商品录入”来谈谈如何给ecshop商品增加一个新字段,假设我们将这个新字段命名为 new_add 1.首先要修改数据表结构,给表 ecs_goods 增加新字段:n ...
- linux下如何关闭防火墙?如何查看防火墙当前的状态
从配置菜单关闭防火墙是不起作用的,索性在安装的时候就不要装防火墙查看防火墙状态:/etc/init.d/iptables status暂时关闭防火墙:/etc/init.d/iptables stop ...
- XSS(跨站脚本攻击)的最全总结
从OWASP的官网意译过来,加上自己的理解,算是比较全面的介绍.有兴趣的可私下交流. XSS 跨站脚本攻击 ============================================== ...
- 常见http错误码解读
HTTP常见错误 HTTP 错误 400 400 请求出错 由于语法格式有误,服务器无法理解此请求.不作修改,客户程序就无法重复此请求. HTTP 错误 401 401.1 未授权:登录失败 此错误表 ...
- 计算机维修之操作系统的安装(windows、Mac、Linux)
从大学开始接触了更多的计算机知识,我就在开荒一样,慢慢的接触多了,就想着安装操作系统一定要学会. 前前后后呢,我折腾过很多操作系统,在我的笔记本上存在过Windows.黑苹果.Linux.安卓等操作系 ...