AngularUI Router


这篇文章主要记录个人学习 angularUI router 的笔记。ui-router传送门

Q:首先明确一点,angular本身有 $route 可以提供页面状态切换服务,为什么要有 ui-router ?
A:因为angular本身的那种是围绕url进行组织的,而 ui-router 则是围绕自定义 states 进行组织的,可以有更丰富的内容,不仅仅可以有 routes ,也可以有其他的行为附加。

Q:在项目中如何使用呢?
A:三步走战略:

1. 获得 angular-ui-router :直接下载 minified 版本或者通过 bower 安装
2. 在你的项目的 index.html 中通过 <script> 标签引用第一步中的文件
3. 在你的项目的 module 的依赖中,加入 ui.router

// setup should look similar to the following:
<!doctype html>
<html ng-app="myApp">
<head>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
    <script src="js/angular-ui-router.min.js"></script>
    <script>
        var myApp = angular.module('myApp', ['ui.router']);
    </script>
    ...
</head>
<body>
    ...
</body>
</html> 

Q:ui-router 的作用关键在于它能够进行 states 和 views 的嵌套,具体是怎么完成的呢?
A:在以上引入了 ui-router 的基础上之后,主要是通过 ui-view 的嵌套完成的。

// 第一步:index.html 文件中
<body>
    <div ui-view></div>
    <!-- We'll also add some navigation: -->
</body>

// 第二步:子页面文件中也有 ui-view ,如 child.html 中
<div ui-view></div>

// 第三步:孙子页面,如 grandchild.html 中
<ul>
    <li ng-repeat="thing in things">{ {thing} }</li>
</ul>

// 第四步:把所有的东西通过 $stateProvider 连接起来
myApp.config(function($stateProvider, $urlRouterProvider) {

    // 对于所有不能匹配的url,直接定向到以下url:
    $urlRouterProvider.otherwise("state1");

    // 接下来设置 states
    $stateProvider.
        state("state1", {
            url: "/state1",
            templateUrl: "child.html"
        })
        .state("state1.list", {
            url: "/list",
            templateUrl: "grandchild.html", 
            controller: function($scope) {
                ...
            }
        })
})
左银右煌 /
Published under (CC) BY-NC-SA in categories programming  tagged with AngularJS