Angular2 路由模塊簡介

jopen 9年前發布 | 89K 次閱讀 Angular2 Web框架 angularjs

Angular2路由模塊簡介

Angular2雖然還沒有正式發布,但全新設計的路由模塊已經提前面世,它從AngularJS 1.4開始支持。相對于老的ngRoute,使用更方便,配置更簡單,更加注重約定。新的路由模塊被命名為Angualar New Router,以前的ui-view被新的ng-viewport取而代之,另外引入了component的概念。我們用一個例子來對它做一個簡單的了解。

先放代碼DEMO

基礎代碼

先來構建基礎的HTML和JS代碼,index.html代碼如下:

<!DOCTYPE html>
<html>
<head>
  <title>Angular New Router Test</title>
</head>
<body ng-app="webApp" ng-controller="AppController as app">
  <div class="container">
    <ng-viewport></ng-viewport>
  </div>

<script src="../lib/angular2/angular.js"></script> <script src="../lib/angular-new-router/dist/router.es5.js"></script> <script src="./app.js"></script> </body> </html></pre>
然后是AngularJS基礎代碼,app.js

'use strict';

angular.module('webApp', ['ngNewRouter']) .controller('AppController', ['$router', AppController]);

AppController.$routeConfig = [ ];

function AppController ($router) { }</pre>

構件component

AngularJS 1.3之前,在配置一個路由頁面時,一般會包括一個HTML模板,一個控制器和一套路由配置。路由配置中,要指定相應的HTML模板和控制器名稱。在新的路由策略中,這些被構件(component)所取代,一個構件包括以下幾部分:

  • 獨立的目錄,目錄名就是構件名
  • 目錄內,與目錄同名的一個js文件,用它來存儲模塊和控制器代碼
  • 目錄內,與目錄同名的HTML文件
  • </ul>

    比如,像下面這樣:

    home/
    ├── home.html
    └── home.js

    單從上面這幾部分來講,可能看不出來構件的優勢,但在路由配置的時候,你根本不用指定HTML文件,也不用指定控制器名字,只需要直接使用構件名——也就是目錄名就行了。像這樣:
    {path: '/', component: 'home'}

    配置的代碼簡化了許多,而你所需要做的,就是遵循約定,使用約定來取代配置。先來看看home.js文件,它包括控制器和模塊代碼:
    angular.module('webApp.home', [])
      .controller('HomeController', ["$router", HomeController]);

    function HomeController($router) { this.AppName = 'Angular New Router示例'; }</pre>
    終于不再$scope滿天飛了,控制器更符合面向對象的概念,使用了this。以前在HTML中,是直接使用控制器內的變量,再在,需要指定構件名了,如下:

    <div class="page-header">
      <h3>{{home.AppName}}</h3>
    </div>

    構件的js文件,需要使用<script>來導入,另外還要在app.js的主模塊中,加入對構件模塊的依賴,如下:
    angular.module('webApp',
        ['ngNewRouter', 'webApp.home', 'webApp.articles']
      )
      .controller('AppController', ['$router', AppController]);

    在上面的index.html文件中,曾經為BODY元素指定了控制器:
    <body ng-app="webApp" ng-controller="AppController as app">
    </body>

    如果要使用AppController中的變量,則需要像下面這樣:
    <span>{{app.AppName}}</span>

    路由的配置

    ngRoute中的路由配置,結構還是比較復雜的——反正我每次都是從現成的路由配置文件復制過來,不然可真記不住。但新的路由模塊配置,相當簡單方便,其實剛剛我們已經看過一行了,再來看看完整的代碼:

    AppController.$routeConfig = [
      {path: '/', component: 'home'}
    ];

    沒錯,直接設置控制器的屬性就行了。還可以在控制器代碼內配置:
    function AppController($router) {
      $router.config([
        {path: '/index', redirectTo: '/'}
      ]);
    }

    以前的url屬性,現在叫path了,單從字面意思上講,其實用path更準確。如果要設置某個路由直接跳轉到另外一個,使用redirectTo即可:
    AppController.$routeConfig = [
      {path: '/', component: 'home'},
      {path: '/index', redirectTo: '/'}
    ];

    當然,你也可以直接設置別名:

    </tr> </tbody> </table>

    基本上,一個路由只需要一條無需換行的代碼便可以配置完成了。

    指向路由的鏈接

    ngRoute中是使用ui-sref來創建鏈接,現在增加了一個ng-link,雖然名字變了,但用法其實差不多,使用如下:

    {path: '/', component: 'home', as: 'home'} 

    </tr> </tbody> </table>

    ng-viewport

    實在不知道這個viewport怎么個翻譯,查了下有道,居然叫視口——好嚇人的感覺。

    其實,它和以前的ui-view差不多,用法如下:

    <ng-viewport></ng-viewport>
    <div ng-viewport></div>
    <div ng-viewport="content"></div>


    這三種都行。最后一種用于有多個構件需要加載的情況。

    路由參數

    路由參數和以前相比,沒什么變化,它在路由中的配置如下:

    1 
    <a ng-link='index' class="navbar-brand">Angular2的路由</a> 

    </tr> </tbody> </table>

    在控制器中,也還是使用$routeParams,如下:

    angular.module('webApp.articles', [])
      .controller("ArticlesController", ['$routeParams', '$router', ArticlesController]);

    function ArticlesController($routeParams, $router){ this.id = $routeParams.id || 0; }</pre>

    鏈接的格式也沒有變化,仍然使用:

    {path: '/articles/:id', component: 'articles'} 

    </tr> </tbody> </table> 來自:http://chensd.com/2015-06/Angular-New-Router.html

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
    <li><a ng-link='articles({id: 1})'>AngularJS常用插件與指令收集</a></li>
sesese色