Angular有自己的内置路由模块:ngRoute。ngRoute对于小型应用来说挺ok,但面对复杂型应用便会有些力不从心,所以有了ui-route这个第三方路由模块,它允许你通过状态机组织接口,而不是简单的URL路由。
ui-router提供哪些指令和服务
指令和服务
- $urlRouterProvider(服务提供者) //用来配置路由重定向
- $urlRouter(服务)
- $stateProvider(服务提供者) //用来配置路由
- $state(服务) //用来显示当前路由状态信息,以及一些路由方法(如:跳转)
- $stateParams(服务) // 用来存储路由匹配时的参数
- ui-view(指令) // 路由模板渲染,对应的dom相关联
- ui-sref(指令)//给对应的dom添加click事件,然后根据state.name直接跳转到对应的state
要定义路由,可以使用.config方法,和常见的方式一样,不过ui-route是讲状态设置在$stateProvider上。
1 |
|
这一步给状态配置对象分配了一个名为index的状态。这个状态也有一些与路由配置对象相似的选项,来配置应用程序的状态
1.template、templateUrl、templateProvider
在每个视图上设置模板的方式有三种。
- template:一个HTML内容字符串或者返回HTML的函数
- templateUrl:一个模板URL路径字符串或者是返回URL路径字符串的函数(如上述例子)
- templateProvider:一个返回HTML内容字符串的函数
2.controller,resolve
和ngRoute一样,可以给一个已经注册好的控制器关联一个URL,也可以创建一个控制器函数作为状态控制器
我们还可以使用resolve功能解析要注入到控制器中得依赖列表。这个resolve选项就是一个对象,其中键就是要注入到控制器中得依赖名称,而其值就是待解析的factories。
3.url
url选项可以给应用程序的状态分配一个唯一的URL,例如在上述的例子中,当用户导航到/index时,应用会转到inbox状态,然后使用模板中得内容填充到ui-view指令。
URL可以接受一系列不同的选项,还可以在url中设置基本的参数
1 |
|
应用会捕获作为URL第二个组成部分的:id。例如如果用户跳转到、index/1,$stateParams.id就是1.
4.嵌套路由
可以使用url参数以插入路由的方式提供嵌套路由。这样可以在页面或者模板内包含多个ui-views。这个方面也是比起ngRoute更加强大的地方之一让我们可以实现嵌套视图(页面某个动态变化区块中,嵌套着另一个可以动态变化的区块)。例如:
1 |
|
现在/parent匹配第一个状态,而/parent/child匹配第二个状态。使用这种语法,可以在父路由中嵌套URL。父视图中得ui-view会解析子路由的视图。
5.views
ui-router的另一个强大的地方是可以在一个状态内设置多个命名视图。在独立的视图内,你可以在独立模板中定义多个要引用的视图。
如果设置了views参数,那么状态的template那些就会被忽略。如果你像在路由中包含父模板,就需要创建一个包含模板的抽象状态。(abstract)
比方说有一个视图:
1 | <div> |
现在,可以创建命名视图来填充每个独立的模板。每个子视图都可以包含它自己的模板、控制器和resolve
1 | $stateProvider |
6.abstract
可以使用抽象模板提供一个模板包装器来包裹多个命名视图,或者传递$scope对象给子节点。可以在同一url下嵌套多个路由(比如所以路由都在/index下)例如嵌套路由下得例子。抽象模板永远不能直接激活,但是可以设置被激活的子节点。