基本用法
基本用法跟angular-router类似
index.html
Document
welcome
main.js
var app = angular.module('app', ['ui.router'])
app.config(function($stateProvider,$urlRouterProvider){
$urlRouterProvider.otherwise('/head');//在请求无效路由时使用的路径
$stateProvider.state('head',{ //设置路由状态
url:'/head', //路径
templateUrl:'tpls/head.html' //加载的模版
})
.state('part1',{
url:'/part1',
templateUrl:'tpls/part1.html'
})
.state('part2',{
url:'/part2',
templateUrl:'tpls/part2.html'
})
.state('part3',{
url:'/part3',
templateUrl:'tpls/part3.html'
})
})
路由之间的跳转
首页
把a标签链接绑定到路由状态(state),如果这个路由状态(state)关联了一个有效的URL,ui-sref
就会通过 $state.href() 方法自动生成和更新href
属性.
还可以在ui-sref
中使用相对路径,就像传递给$state.href() 的相对路径一样,只需要确认路径是相对于链接所处的路由状态(state)的,也就是加载的路由状态(state)模版包含这个链接
可以使用ui-sref-opts
选择属性指定要传递给$state.go()
的选项。选项被限制在location
、inherit
和reload
。
var app = angular.module('app', ['ui.router'])
app.config(function($stateProvider,$urlRouterProvider){
$urlRouterProvider.otherwise('/head');
$stateProvider.state('head',{
url:'/head',
templateUrl:'tpls/head.html'
})
.state('part1',{
url:'/part1',
templateUrl:'tpls/part1.html'
})
.state('part2',{
url:'/part2',
templateUrl:'tpls/part2.html'
})
.state('part3',{
url:'/part3',
templateUrl:'tpls/part3.html'
})
.state('part3.part4',{
url:'/part4',
templateUrl:'tpls/part4.html'
})
})
多个view以及state嵌套
有时候一个页面可能有多个view,一个view可以匿名也可以命名,但在同一个模版中只能有一个匿名view.
如果只有一个单一的匿名view,可以这样写
$stateProvider.state("home", {
template: "HELLO!
"
})
也可以显式的指定一个views属性
$stateProvider.state("home", {
views: {
"": {
template: "HELLO!
"
}
}
})
在同一个模版中如果给view命名了或者有多个view,则只能使用views属性,当只有一个view时候可以命名也可以匿名
$stateProvider.state("home", {
views: {
"main": {
template: "HELLO!
"
}
}
})
多视图嵌套
index.html
content.html
head.html
part3.html
第三部分
第四部分
main.js
var app = angular.module('app', ['ui.router'])
app.config(function($stateProvider,$urlRouterProvider) {
$urlRouterProvider.otherwise('/part1');
$stateProvider
.state('state',{
url:'/',
views:{
"@":{
templateUrl:'tpls/content.html'
},
"header@state":{ //加载content中的header视图
templateUrl:'tpls/head.html'
}
}
})
.state('state.part1',{
url:'part1',
views:{
"body@state":{//state里name为body的view加载模版
templateUrl:'tpls/part1.html'
}
}
})
.state('state.part2',{
url:'part2',
views:{
"body@state":{//state里name为body的view加载模版
templateUrl:'tpls/part2.html'
}
}
})
.state('state.part3',{
url:'part3',
views:{
"body@state":{ //state里name为body的view加载模版
templateUrl:'tpls/part3.html'
}
}
})
.state('state.part3.part4',{
url:'/part4',
views:{
"":{ //part3(part4的父级state)的匿名view加载模版
templateUrl:'tpls/part4.html'
}
}
})
})
$stateProvider.state(name,stateConfig)
参数
var app = angular.module('app', ['ui.router'])
app.config(function($stateProvider,$urlRouterProvider) {
$stateProvider
.state(
'states',//一个合法statename,或者父/子state,如'states.home','states.about'
{
//template:字符串或函数,路由html模版,如果是函数,那么函数的参数是从当前 `$location.path()`提取到的状态参数
//templateUrl:字符串或函数.路由模版路径
//templateProvider:返回HTML字符串的函数
//controller:我们既可以通过控制器的名字来关联一个预定义的控制器,也可以直接创建一个控制器函数来处理。
//controllerProvider:一个函数,返回实际控制器
//controllerAs:控制器别名
//parent:可选定当前state的父state
//resolve:{
// key:value
// }为控制器提供可选的依赖对象,key是被注入控制器的依赖的名称,value如果是一个字符串,就试图用这个字符串来匹配当前已经注册的服务名称,如果是一个函数,执行这个函数,返回的值就是依赖。如果函数返回一个 promise,在控制器被实例化之前,将会被 resolved,返回的值被注入到 controller 中。
//url:带有可选参数的url片段,当一个state被激活,$stateParams服务将被传入的参数填充
//views:定义视图
//Params:参数名称或者正则的数组。它不能合并 url 选项,当状态激活的时候,应用会使用这些参数填充 $stateParams 服务。
//Abstract:我们永远不能直接激活抽象模板,但是,可以通过派生模板来激活.抽象模板提供封装命名视图的模板,可以传递 $scope 对象给派生子模板。可以通过它解决依赖问题,或者特定数据处理,或者简单地同样的 url 来嵌套多个路由
//onEnter, onExit 在应用进入或者退出视图的时候,会调用这些回调函数。它们都可以设置回调函数;函数可以访问获取的数据。
//data:数据不会被注入到控制器中,用途是从父状态传递数据到子状态。
}
)
})