如何使用ui-router?

上海分院:刘泽华

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

Angular.js 是一个用来构建“富客户端”的神奇JavaScript框架。但是事实却是许多开发者却不使用其内置的路由模块。反而使用AngularUI项目的UI-Router模块来代替之。 这是因为UI-Router有两个重要的特性:
* 多样化视图
* 嵌入式视图

多样化视图
大多数的应用程序都可以分解为一个一个区块。最简单的情况,一个应用程序有头部(header),主体内容(main contentarea),以及一个尾部(footer)。通常一个应用程序会有一个额外的侧边栏(sidebar )在页面的左边或者右边,大多数用例中,这些区块将同时显示在页面上。
Angular.js 的内置路由ngRoute只允许一个视图(ng-view)出现在页面上。
UI-Router支持多样化视图,并且每一个视图都有自己相应的控制,所以每个区块都是封装好,可以复用到整个应用程序需要的地方。

嵌入式视图
常见的例子中,一个应用的嵌入式页面一般是主页的详情页面,更具体的说,就是列表的详情页面。许多应用程序,都有列表页面,点击其中一个列表元素,可以进入到列表的详情页面。更进一步说,你点击列表中一个行的连接,进入一个可查看详情页面或是一个可编辑的表单。
如果列表页面和详情页面是单独分开的(或者他们被Angujar.js回调),使用Angular.js的内置路由ngRoute 是非常容易完成的。然而,如果你想要保持列表不变,而详情页面出现在列表的右边或者下面,这样就变得非常具有挑战性了。

2.知识剖析

第一行,声明AngularJS模块, 并把ui-router传入AngularJS主模块,所有的结合起来我们就得到了Angular模块。

与集成的ngRoute服务不同的是,UI-Router可以将视图嵌套,因为它基于的是操作状态而仅非URL。与传统做法使用ng-view不同的是,在ngRoute里需要使用ui-view服务。当在ui-router中处理路由和状态时,开发者的重心是当前的状态是什么以及在哪一个页面里。

和ngRoute一样,为特定状态指定的模板将会放在ui-view元素中。在这些模板中也可以包含自己的ui-view,这就是在同一个路由下实现嵌套视图的方法。要定义一个路由,与传统的方法相同:使用.config方式,但使用的不是$routeProvider而是$stateProvider。

$stateProvider:管理状态定义、当前状态和状态转换。包含触发状态转换的事件和回调函数,异步解决目标状态的任何依赖项,更新$location到当前状态。由于状态包含关联的 url,通过$urlRouterProvider生成一个路由规则来执行转换的状态。

$urlRouterProvider:管理了一套路由规则列表来处理当$location发生变化时如何跳转。最低级的方式是,规则可以是任意函数,来检查$location,并在处理完成时候返回true。支持正则表达式规则和通过$urlMatcherFactory编译的UrlMatcher对象的 url 占位符规则。

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

鸣谢

感谢观看

BY——刘泽华