AngularJS 中的ui.router使用方法

前端之家收集整理的这篇文章主要介绍了AngularJS 中的ui.router使用方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一:为什么使用ui-router?

  如果使用原生router的话,也就是当我们在index.html页面引用angular-route.js的时候,例如:我们在index.html页面body下加入<div class="page {{pageClass}}" ng-view></div>,然后我们在app.js中写入(具体代码文章末尾的下载链接):

  1. var bookStoreApp = angular.module('bookStoreApp',[
  2. 'ngRoute','ngAnimate','bookStoreCtrls','bookStoreFilters','bookStoreServices','bookStoreDirectives'
  3. ]);
  4.  
  5. bookStoreApp.config(function($routeProvider) {
  6. $routeProvider.when('/hello',{
  7. templateUrl: 'tpls/hello.html',controller: 'HelloCtrl'
  8. }).when('/list',{
  9. templateUrl: 'tpls/bookList.html',controller: 'BookListCtrl'
  10. }).otherwise({
  11. redirectTo: '/hello'
  12. })
  13. });

此时,我们首页默认显示hello,当我们在页面中点击下一页链接的时候,我们跳转到以list为模板的页面。以上是简单的页面跳转,但是如果我们需要稍微复杂一点的页面,例如我们想要写个上面一个是菜单栏,菜单栏下面还有点击的页面,就像是选项卡一样,但是分别进入了不同的页面(实际上是angularjs路由机制中替换了某个模板),如下图所示:

我们就需要用到嵌套的路由,因此,我们需要用到angularjs中ui.router模块。

二:怎样使用ui-router?

  使用ui-routerngRouter模块当然有很多不同的地方,例如在index.html中,我们在body中就使用<div ui-view=""></div>。接下来看详细用法
1.首先我们需要知道项目的目录结构:

其中node_modules和package.json不用多说,是git版本控制,不用也可以,app目录就是项目的入口,里面的index.html是主模板,js中的app.js是项目的入口文件,tpls目录里面存放html模板,它需要和index.html组合使用。当然,组合使用就需要路由文件支持
2.我们需要使用bower安装angular-ui-router模块,当然是在你的项目任意目录下面创建,使用的时候需要写好路径就好,尽量到framework里面安装,因为里面都是存放angularjs相关的js代码文件

  1. bower install angular-ui-router

3.其次就是添加index.html文件

  1. <!doctype html>
  2. <html ng-app="routerApp">
  3.  
  4. <head>
  5. <Meta charset="UTF-8">
  6. <title>BookStore</title>
  7. <link rel="stylesheet" href="framework/bootstrap-3.0.0/css/bootstrap.css">
  8. <script src="../bower_components/angular/angular.min.js"></script>
  9. <script src="../bower_components/angular-ui-router/release/angular-ui-router.min.js"></script>
  10. <script src="js/app.js"></script>
  11. </head>
  12.  
  13. <body>
  14. <nav class="navbar navbar-inverse" role="navigation">
  15. <div class="navbar-header">
  16. <a class="navbar-brand" ui-sref="#">AngularUI Router</a>
  17. </div>
  18. <ul class="nav navbar-nav">
  19. <li>
  20. <a ui-sref="home">Home</a>
  21. </li>
  22. <li>
  23. <a ui-sref="about">About</a>
  24. </li>
  25. </ul>
  26. </nav>
  27. <div class="container">
  28. <div ui-view=""></div>
  29. </div>
  30. </body>
  31. </html>

接下来创建四个模板文件:about.html,home.html.home-list.html和table-data.html,代码如下:
home.html页面

  1. <div class="jumbotron text-center">
  2. <h1>Home</h1>
  3. <p>This page demonstrates
  4. <span class="text-danger">nested</span>views.
  5. </p>
  6. <a ui-sref=".list" class="btn btn-primary">List</a>
  7. <a ui-sref=".paragraph" class="btn btn-danger">Paragraph</a>
  8. </div>
  9. <div ui-view></div>

home下面有两个链接list和paragraph,这连个模板如下所示:
home-list.html页面

  1. <ul> <li ng-repeat="topic in topics">{{ topic }}</li> </ul>

paragraph页面在app.js里面被直接写入:

  1. .state('home.paragraph',{
  2. url: '/paragraph',template: 'I could sure use a scoop of ice-cream.2 '
  3. })

因此,可以不用创建,如果需要更复杂的页面,就需要创建,在这里只是作为演示。
4.然后我们添加about.html页面
about.html页面

  1. <div class="jumbotron text-center">
  2. <h1>The About Page</h1>
  3. <p>This page demonstrates
  4. <span class="text-danger">multiple</span>and
  5. <span class="text-danger">named</span>views.</p>
  6. </div>
  7. <div class="row">
  8. <div class="col-md-6">
  9. <div ui-view="columnOne"></div>
  10. </div>
  11. <div class="col-md-6">
  12. <div ui-view="columnTwo"></div>
  13. </div>
  14. </div>

about页面里面有两个ui-view,即:columnOne和columnTwo,所以需要另一个模板table-data.html显示,该模板如下:

  1. <h2>Ice-Creams</h2> <table class="table table-hover table-striped table-bordered"> <thead> <tr> <td>Name</td> <td>Cost</td> </tr> </thead> <tbody> <tr ng-repeat="topic in topics"> <td>{{ topic.name }}</td> <td>${{ topic.price }}</td> </tr> </tbody> </table>

5.配置页面的路由,即app.js文件

  1. var routerApp = angular.module('routerApp',['ui.router']);
  2. routerApp.config(['$stateProvider','$urlRouterProvider',function($stateProvider,$urlRouterProvider) {
  3. /*路由重定向 $urlRouterProvider:如果没有路由引擎能匹配当前的导航状态,那它就会默认将路径路由至 home.html,*这个页面就是状态名称被声明的地方. */
  4. $urlRouterProvider.otherwise('/home');
  5. $stateProvider
  6. .state('home',{
  7. url: '/home',templateUrl: 'tpls/home.html'
  8. })
  9. /* nested list with custom controller*/
  10. .state('home.list',{
  11. url: '/list',templateUrl: 'tpls/home-list.html',controller: function($scope) {
  12. $scope.topics = ['Butterscotch','Black Current','Mango'];
  13. }
  14. })
  15. // nested list with just some random string data
  16. .state('home.paragraph',template: 'I could sure use a scoop of ice-cream.2 '
  17. })
  18. .state('about',{
  19. url: '/about',/* view 用在该状态下有多个 ui-view 的情况,可以对不同的 ui-view 使用特定的 template,controller,resolve data 绝对 view 使用 '@' 符号来区别,比如 'columnOne@about' 表明名为 'columnOne' 的 ui-view 使用了 'about' 状态的 模板(template),相对 view 则无*/
  20. views: {
  21. // 无名 view
  22. '': {
  23. templateUrl: 'tpls/about.html'
  24. },// for "ui-view='columnOne'"
  25. 'columnOne@about': {
  26. template: '这里是第一列的内容'
  27. },// for "ui-view='columnTwo'"
  28. 'columnTwo@about': {
  29. templateUrl: 'tpls/table-data.html',controller: 'table-Controller'
  30. }
  31. }
  32. });
  33. }]);
  34. routerApp.controller('table-Controller',function($scope) {
  35. $scope.message = 'test';
  36. $scope.topics = [{
  37. name: 'Butterscotch',price: 50
  38. },{
  39. name: 'Black Current',price: 100
  40. },{
  41. name: 'Mango',price: 20
  42. }];
  43. });

最后写一下需要学习更多的童鞋,github网址:angular-ui/ui-router的github链接地址
我的代码备份:angularjs中ui.router和ngRouter模块的用法

猜你在找的Angularjs相关文章