通过AngularJS来创建SPA(single page application),要想让页面导航看起来跟一般Web页面一样的话,路由相当重要。AngularUI Router是AngularUI 团队开发的一个AngularJS路由模块,相比AngularJS的标准路由ngRoute,它更灵活,基于state而不是URL在一个页面中加载多个View并保持View的层次,Nested States & Views以及Multiple & Named Views。UI-Router被认为是AngularUI为开发者提供的最实用的一个模块。
和ngRoute相比:
- $route -> $state
- $routeParams -> $stateParams
- $routeProvider -> $stateProvider
- <div ng-view></div> -> <div ui-view></div>
(1)设置路由
在.config()方法中使用$stateProvider(不是$routeProvider)来配置应用或者模块的state:
$stateProvider.state('state名', {设置信息});
但是默认otherwise需要使用$urlRouterProvider来设置
$urlRouterProvider.otherwise('/tab/home');
设置whenPath(可用正则),当匹配是直接跳转到toPath
$urlRouterProvider.when(whenPath, toPath);
自定义URL捕获处理,handler方法有一个参数$location返回一个path
$urlRouterProvider.rule(handler);
例如:
$stateProvider
.state("emp",{
url:"/emp"
,templateUrl:"list.html"
,controller:"ListCtrl"
})
.state("emp.detail",{
url:"/:empID"
,templateUrl:"emp.html"
,controller:"EmpCtrl"
});
ngRoute的设置方法:
$routeProvider.when('url', {设置信息});
例如:
$routeProvider
.when("/emp",{
templateUrl:"list.html"
,controller:"ListCtrl"
})
.when("/emp/:empID"){
templateUrl:"emp.html"
,controller:"EmpCtrl"
};
(2)层次化
state可以嵌套,state名必须唯一,通过state名中的点来划分Parent/child层次。
格式为:父View.子View
比如:items.detail是items的子View。
$stateProvider
.state("items", {
abstract: true,
url: "/items"
templateUrl: "items.html" // 必须包含<ui-view/>
})
.state("items.detail", {
url: "/detail", // URL就是"/items/detail"
templateUrl: "items-detail.html"
})
.state("items.info", {
url: "/info", // URL就是"/items/info"
templateUrl: "items-info.html"
});
(3)设置信息
url:默认相对路径(以^开头的是绝对路径)
views:每个子视图可以包含自己的模板、控制器和预载入数据。
abstract:设置为true时,只能被继承不能直接切换到此state
template、templateUrl、templateProvider:HTML字符串或者返回HTML字符串的函数、HTML模板的路径或者返回HTML模板路径的函数
controller、controllerProvider:可以是一个控制器函数或者已经被注册的控制器名称,controllerProvider是一个注入函数返回控制器函数或控制器名称
resolve:在路由到达前预载入一系列依赖或者数据,然后注入到控制器中。
data:数据不会被注入到控制器中,用途是从父状态传递数据到子状态。
onEnter/onExit:进入或者离开当前状态的视图时会调用这两个函数
URL使用举例:
url: '/inbox'
url: '/inbox/:inboxId'
url: '/inbox/{inboxId}'
url: '/inbox/{inboxId:[0-9a-fA-F]{6}}'
url: '/inbox/{inboxId:.*}'
url: '/inbox?sort'
url: '/inbox/:inboxId/messages/{sorted}?from&to'
url: '/party/:partyID/:partyLocation'
url: '/product/info/favorite?pid&jancode&showAddFavorite&fromPg'
(4)指定View名
<div ui-view="view1"></div>
<div ui-view="view2"></div>
.state("emp.detail"),{
url:"/:empID"
,views:{
view1:{
templateUrl:"view1.html"
,controller:"View1Ctrl"
}
,view2:{
templateUrl:"view1.html"
,controller:"View1Ctrl"
}
}
}
初始View
.state("emp.detail"),{
url:"/:empID"
,views:{
"":{
templateUrl:"emp.html"
,controller:"EmpCtrl"
}
}
}
view@state
.state("emp.detail.picture"),{
url:"/all"
,views:{
"@emp":{
templateUrl:"picture.html"
,controller:"PictureCtrl"
}
}
}
(5)页面跳转
链接点击后跳转到指定state
<a href="#/emp/hoge/1234">Go</a>
<a ui-sref=".hoge({id:empID})">Go</a>
$state.go('state名' [, 参数] [, 可选项]);
参数在下一个控制器中通过$stateParams接收
可选项:
location:true(更新地址栏)、false(不更新地址栏)、replace(更新地址栏同时更新history记录)
inherit:true(继承当前URL的参数)、false
relative:跳转原来的state对象
notify:true(激发$stateChangeStart和$stateChangeSuccess)、false
reload:重新加载
$state.reload();
$state.includes(stateName [, params]);
$state.is(stateOrName [, params]);
$state.href(stateOrName [, params] [, options]);
$state.get([stateName]);
$state.current
(6)事件
state事件
- $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){ ... })
- $rootScope.$on('$stateNotFound', function(event, unfoundState, fromState, fromParams){ ... })
- $rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams){ ... })
- $rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error){ ... })
view事件
View被加载但是DOM树构建之前时:
$scope.$on('$viewContentLoading', function(event, viewConfig){ ... });
View被加载而且DOM树构建完成时:
$scope.$on('$viewContentLoaded', function(event){ ... });
参考:
https://github.com/angular-ui/ui-router
https://docs.angularjs.org/api/ngRoute
http://angular-ui.github.io/ui-router/sample/
http://scotch.io/tutorials/javascript/angular-routing-using-ui-router
http://blog.eisneim.com/articles/dive_deep_into_ui-router.html
分享到:
相关推荐
在本项目“angular-ui-router.statehelper”中,我们关注的是AngularUI Router的一个扩展模块,它被称为State Helper。这个助手模块是为了帮助开发者更好地管理和组织应用的状态,特别是当项目中的状态变得复杂时。 ...
UI-Router提供基于状态的路由。 应用程序的每个功能都定义为一个状态。 一个状态随时处于活动状态,UI-Router管理状态之间的转换。 每个状态都描述功能的URL,UI(一个或多个视图),数据先决条件和其他逻辑先决条件...
SAPROUTER是一款由SAP公司提供的网络通信软件,它主要负责在SAP系统与外部网络之间建立安全、可靠的连接。SAPROUTER允许远程用户和应用程序通过Internet或专用网络访问SAP系统,进行数据传输、远程登录以及系统监控...
标题“KUKA Router.rar”指的是一个压缩文件,其中包含了KUKA Router的相关软件或配置。KUKA Router是一款专为KUKA机器人系统设计的通信工具,它主要用于解决KUKA OfficeLite与网络之间的连接问题。由于OfficeLite...
PADS Layout是其设计环节中用于进行电路板布局的部分,而Router则是用于布线的组件。在PCB设计中,布局和布线是前后相续的两个重要步骤,两者之间的同步操作对于提高设计效率和减少错误有着重要意义。 在PADS V9.3...
《KUKA Router插件详解:开启库卡机器人与EthernetKRL通信的旅程》 在自动化领域,库卡(KUKA)机器人以其卓越的性能和广泛的适用性赢得了业界的广泛认可。为了实现机器人与其他设备的高效通信,KUKA 提供了多种...
在IT领域,SAP Router和SPAM是两个关键的概念,特别是在SAP系统的管理和维护中。本文将深入探讨这两个工具的功能、配置以及它们在SAP环境中的应用。 首先,让我们了解SAP Router。SAP Router是一种网络协议软件,...
RouterOS,通常被称为ROS,是由MikroTik公司开发的一款强大的网络操作系统,主要用于路由器设备。这个系统以其灵活性和丰富的功能而闻名,然而,由于其基础是基于ASCII字符集,因此在默认情况下并不直接支持中文字符...
MySQL 高可用学习笔记 mysqlrouter_MHA 本文档主要讲解了 MySQL Router 和 MHA 的高可用配置和测试步骤。MySQL Router 是一个提供高可用和负载均衡的工具,而 MHA 是一个提供高可用和自动failover 的工具。下面我们...
RouterOS常用命令详解 RouterOS是一款功能强大且灵活的路由操作系统,它提供了许多实用的命令来帮助用户管理和维护路由器。下面是RouterOS中一些常用的命令,旨在帮助用户更好地了解和掌握RouterOS。 一、帮助命令...
RouterOS是由Microtik公司开发的一款强大的路由器操作系统,它提供了丰富的功能和高度的灵活性,被广泛应用于企业级网络管理。"RouterOS web界面汉化文件"是专为改善RouterOS的Web界面语言环境而设计的,目的是为了...
Angular Router by Victor Savkin English | 20 Mar. 2017 | ASIN: B06X9N272Y | 118 Pages | AZW3 | 2.44 MB Key Features Written by the creator of the Angular router, giving you the best information ...
摘 要:RouterOS 是一种路由操作系统,通过该软件可以将普通的PC 电脑变成专业路由器,该软件经历了多次更新和改进,其功能在不断增强和完善。特别在无线、认证、策略路由、带宽控制和防火墙过滤等方面有着非常突出...
在 RouterOS 系统中,电子盘(硬盘或者 SSD)的 ID 是用于识别存储设备的重要标识。这个 ID 在系统配置、数据存储以及故障排查时都起着关键作用。有时,出于管理和维护的需求,我们可能需要修改电子盘的 ID。本文将...
Python库RouterOS-api-0.10是一个专为与MikroTik RouterOS系统进行交互而设计的软件开发工具包。MikroTik RouterOS是一款强大的路由器操作系统,广泛用于网络设备配置、管理和监控。这个库使得开发人员能够通过...
MySQL Router 8.0.27 是一个针对MySQL数据库系统的路由解决方案,专为Windows x64平台设计。作为MySQL生态系统的一部分,它旨在提高应用程序与MySQL服务器之间的连接效率和安全性。MySQL Router提供了一种智能的方式...
解,毕竟 RouterOS 的应用是比较灵活,在不同硬件平台上反映也有差别。教程从最基础的安装、如何登陆配 置到深入多线路策略和流量控制,以及各种服务器、WLAN 配置和脚本编写都进行了讲解,也分析 RouterOS 工作流程...
本文将深入探讨"router_eSIM_v1 Flash 模拟器"及其配置命令,这对于初学者掌握Cisco路由器的操作至关重要。 首先,"router_eSIM_v1"是一个模拟软件,它允许用户在没有物理设备的情况下模拟Cisco路由器的操作环境。...