通常來講,咱們認爲AngularJS是一套前端的MVC框架。那麼,爲了實現視圖的中轉,確定會涉及到路由的概念。這裏咱們就來講說有關AngularJS的路由——ngRoute。html
我的瞭解到AngularJS,是因爲在尋找能夠動態利用Ajax從服務器端取得部分頁面這一功能而找到EmberJS,然後又根據EmberJS找到的AngularJS。而在AngularJS中,實現這一功能的,就是ngRoute。前端
因此,我的與AngularJS的結緣,是因爲ngRoute一點也不爲過。angularjs
AngularJS的基礎是其模塊機制。在模塊的基礎上,咱們能夠利用JavaScript的一些特性來作咱們想作的任何的事情。ajax
ngRoute是一個AngularJS的模塊。其不是在AngularJS的核心庫當中。api
在使用ngRoute的時候,實際上,咱們是在應用的主模塊中引入ngRoute模塊並添加$routeProvider服務到主模塊的config方法中來達到咱們的目標。這與其餘一些庫的使用方式是相似的,如ng-grid。服務器
在ngRoute中,主要有$route、$routeProvider、$routeParams三個服務項目。網絡
$routeProvider用於在主應用主模塊的配置方法中。$route與$routeParams通常常見於控制器中。框架
1 |
http://ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/angular-route.js |
因爲國內網絡環境的和諧,我的強烈建議使用此種方式!ide
1 |
bower install angular-route@X.Y.Z |
1 |
http://code.angularjs.org/X.Y.Z/angular-route.js |
ngRoute並無在AngularJS的核心包裏面,因此在使用的時候,須要引入一個獨立的庫。函數
1 2 3 4 |
<!-- index.html --><script src="angular.js" /><script src="angular-route.js" /> |
1 2 3 |
myApp = angular.module(, []); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
configFn = $routeProvider. when(, { templateUrl: , controller: }). when(, { templateUrl: , controller: }). otherwise({ redirectTo: }); }; myApp.config(configFn); |
$routeProvider是一個用於配置路由的內置服務。因爲它是一個服務,根據service的使用建議,咱們主要將其當作爲工具來使用,因此咱們通常直接使用$routeProvider.XXX來調用它的成員方法來實現必定的功能,而不是實例化一個$routeProvider的實例。它主要有如下兩個成員函數:
$routeProvider.when(path, route)中的路由處理參數對象,經常使用的有以下的屬性:
不經常使用屬性:
$route用於將控制器與視圖相連。它觀察$location.url(),而且嘗試映射路徑到一個已經存在的路由定義中。它依賴$location、$routeParams。它主要有以下成員函數:
它主要有以下事件:
$routeParams
容許你檢索當前路由的參數。主要使用$location
的search()
與path()
方法。