when(what,handler);
为给定的URL匹配注册一个处理程序。
参数:
what:需要重定向的传入路径。
handler:你想要重定向的路径。
代码:
$urlRouter
依赖:$location $rootScope $injector $browser
方法:
href(urlMacther,params,options);
一个生成URL的方法,为给定的UrlMatcher返回编译后的URL,并且用提供的参数填充。
参数:
urlMacther:用于当作生成URL的模板的UrlMacther对象。
params:一个参数值的对象用来填补所需的匹配参数。
options:option对象,absolute-boolean,如果为true,将会生成一个绝对地址。
代码:
$bob=$urlRouter.href(newUrlMatcher("/about/:person"),{
person:"bob"
});//$bob=="/about/bob";
sync();
sync();
触发更新:发生在地址栏URL变化时执行相同的更新。
$state
$state服务负责代表状态及提供状态之间的转换。它还提供你当前的状态及上一个状态。
依赖:$rootScope $q $view $injector $resolve $stateParams $urlRouter
方法:
get(stateOrName,context);
返回任何指定的状态或所有状态的配置对象。
参数:
stateOrName:如果提供此参数,返回的是指定状态的配置对象;如果不提供此参数,则返回全部状态的配置对象。
context:当context是一个相对的参考状态,状态会在相关上下文中检索。
方法:
go(to,options);
参数:
to:string,即将跳转的状态。
params:object,跳转所带的参数。
options:object,可选配置对象。有 location(是否更新地址栏的url,或以什么字符串替换url),inherit(是否继承当前url的参数),relative(当变化相对路径:如"^,定义的状态是相对的),notify(是否广播$stateChangeStart和$stateChangeSuccess事件),reload(是否重新载入)。
代码:
'contact.detail'
href(stateOeName,options);
一个URL生成方法,返回为给定的状态填充指定的参数编译后的链接。
参数:
stateOeName:string,你想要生成的url的状态或者状态对象。
params:object,一个用于填充状态需要的参数的对象。
options:可选配置对象。有lossy(当第一个参数url未被提供时是否继承导航的url进行构建href),inherit(是否继承当前url的参数),relative(当变化相对路径:如"^,定义的状态是相对的),absolute(是否生成绝对url)。
代码:
$state.href("about.person",{person:"bob"})
include(stateOrName,options);
一个确定当前有效的状态是不是与stateOrName平级的还是其子状态。
参数:
stateOeName:string,部分名称,相对名称,或者通过当前状态进行全局模式查找。
params:object,一个参数对象。
options:可选配置对象。有relative。
代码:
<divng-class="{highlighted:$state.includes('.item')}">Item</div>
$state.$current.name='contacts.details.item';
$state.includes("contacts");//true
$state.includes("contacts.details");//true
$state.includes("contacts.details.item");//true
$state.includes("contacts.list");//false
$state.includes("about");//false
全局模式:
$state.$current.name='contacts.details.item.url';
$state.includes("*.details.*.*");//true
$state.includes("*.details.**");//true
$state.includes("**.item.**");//true
$state.includes("*.details.item.url");//true
$state.includes("*.details.*.url");//true
$state.includes("*.details.*");//false
$state.includes("item.**");//false
is(stateOrName,options);
与$state.include相似,只是这个针对的是全名。参数性质同上。
代码:
<divng-class="{highlighted:$state.is('.item')}">Item</div>
$state.$current.name='contacts.details.item';
$state.is('contact.details.item');//true
$state.is(contactDetailItemStateObject);//true
reload(state);
重新载入当前状态的方法。
参数:
state:一个状态名称或者状态对象。
代码:
$state.reload('contact.detail');
transitionTo(to,toParams,options);
过渡到一个新状态的方法。
参数:
to:状态名称。
toParams:将会发送到下一个状态的参数。
options:可选参数。有location,inherit,relative,notify,reload。
代码:
$state.transitionTo($state.current,$stateParams,{
reload:true,inherit:false,notify:true
});
事件:
$stateChangeError
路由状态变化发生错误时触发的事件。参数有:event,toState,toParams,fromState,fromParams,error。以上根据字面意思即可理解,哈哈。
$stateChangeStart
路由状态变化发生前触发的事件。参数有:event,toState,toParams,fromState,fromParams。
$stateChangeSuccess
路由状态变化正确时触发的事件。参数有:event,toState,toParams,fromState,fromParams。
$stateNotFound
路由状态没找到的时候触发的事件。参数有:event,unfoundState,fromState,fromParams。
$stateProvider
处理路由状态的服务,路由的状态反映了该项在应用程序中的位置,描述了在当前状态下UI是应该怎么样的,并且该做什么。
依赖:$urlRouterProvider $urlMatcherFactoryProvider
方法:
decorator(name,func);
通过内部的$stateProvider以扩展或者重写状态生成器。可用于添加ui-router的自定义功能,例如,基于状态名称推断templateUrl。
警告:因为生成器的函数执行顺序的不确定,decorator不应该相互依赖。
参数:
name:需要修改的生成函数名称。
func:负责修改生成器函数的函数。
代码:
$stateProvider.decorator('views',function(state,parent){varresult={},views=parent(state);
angular.forEach(views,function(config,name){varautoName=(state.name+'.'+name).replace('.','/');
config.templateUrl=config.templateUrl||'/partials/'+autoName+'.html';
result[name]=config;
});returnresult;
});
$stateProvider.state('home',{
views:{'contact.list':{controller:'ListController'},'contact.item':{controller:'ItemController'}
}
});
$state.go('home');
以上代码修饰了“views”直接通过state的名称绑定完对应的页面模板。
state(name,stateConfig);
注册一个状态,并给定其配置。
参数:
name:状态的名称。
stateConfig:状态配置对象。配置具有以下各项属性:
template: string/function,html模板字符串,或者一个返回html模板字符串的函数。
templateUrl:string/function,模板路径的字符串,或者返回模板路径字符串的函数。
templateProvider:function,返回html模板字符串或模板路径的服务。
controller:string/function,新注册一个控制器函数或者一个已注册的控制器的名称字符串。
controllerProvider:function,返回控制器或者控制器名称的服务
controllerAs:string,控制器别名。
parent:string/object,手动指定该状态的父级。
resolve:object,将会被注入controller去执行的函数,<string,function>形式。
url:string,当前状态的对应url。
views:object,视图展示的配置。<string,object>形式。
abstract:boolean,一个永远不会被激活的抽象的状态,但可以给其子级提供特性的继承。默认是true。
onEnter:function,当进入一个状态后的回调函数。
onExit:function,当退出一个状态后的回调函数。
reloadOnSearch:boolean,如果为false,那么当一个search/query参数改变时不会触发相同的状态,用于当你修改$location.search()的时候不想重新加载页面。默认为true。
data:object,任意对象数据,用于自定义配置。继承父级状态的data属性。换句话说,通过原型继承可以达到添加一个data数据从而整个树结构都能获取到。
params:url里的参数值,通过它可以实现页面间的参数传递。
ui-sref
一种将链接(<a>标签)绑定到一个状态的指令。点击该链接将触发一个可以带有可选参数的状态转换。
代码:
<aui-sref="app.index">首页</a>
<!--这里是正常的跳转-->
<aui-sref="app.index({id:yourId})">你的主页</a>
<!--这里是带参数对象的跳转,名称是id,值是yourId-->
简单的使用代码(ui-router的单视图):
<divng-app="Demo"ng-controller="testCtrlasctrl"><ol><li><aui-sref="app">app</a></li><li><aui-sref="test">test</a></li></ol><divui-view></div><scripttype="text/ng-template"id="'page1.html'">thisispage1forapp.</script><scripttype="text/ng-template"id="'page3.html'">thisispage1fortest.</script>
</div>
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
angular.module(
'Demo'
,[
'ui.router'
])
.config([
"$stateProvider"
"$urlRouterProvider"
.controller(
"testCtrl"
function
routeConfig($stateProvider,$urlRouterProvider){
$urlRouterProvider.otherwise(
"/app"
);
$stateProvider
.state(
"app"
url:
templateUrl:
"'page1.html'"
})
"test"
"/test"
"'page3.html'"
})
}
|
使用代码(ui-router的多视图):
<divng-app="Demo"ng-controller="testCtrlasctrl"><ol><li><aui-sref="app.page1">app</a></li><li><aui-sref="test.page1({id:1})">test</a></li></ol><divui-view></div><scripttype="text/ng-template"id="'layout.html'"><divui-view="nav@"></div><divui-view></div></script><scripttype="text/ng-template"id="'nav1.html'"><ol><li><aui-sref="app.page1">app.page1</a></li><li><aui-sref="app.page2">app.page2</a></li</ol></script><scripttype="text/ng-template"id="'nav2.html'"><ol><li><aui-sref="test.page1({id:1})">test.page1</a></li><li><aui-sref="test.page2">test.page2</a></li</ol></script><scripttype="text/ng-template"id="'page1.html'">thisispage1forapp.</script><scripttype="text/ng-template"id="'page2.html'">thisispage2forapp.</script><scripttype="text/ng-template"id="'page3.html'">thisispage1fortest.</script><scripttype="text/ng-template"id="'page4.html'">thisispage2fortest.</script>
</div>
注意:需要引入angular-ui-router[.min].js
这里本兽没有也不会把全部用法写一遍 -。- 写两个简单的案例仅供学习参考。这里偷个懒,把代码都写在一个页面上完成了... 毕竟花了两个晚上的空闲时间用来整理内容和写demo 考虑到第二天要上班,都是尽量的早睡,所以整理资料拖的久了些。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!