之前有寫過一篇關于Angular自帶的路由:ngRoute。今天來說說Angular的第三方路由:ui-router。那么有人就會問:為什么Angular有了自帶的路由,我們還需要用ui-router呢?這里簡單明了的說明下ngRoute和ui-router的區別吧,其實也沒很大的區別,主要的就是ngRoute針對于單視圖,而ui-router可用于多視圖(這里說的視圖是指在頁面內我們可控制的,可變化的區域)。
比如我們點擊了一個link,我們需要在視圖中跳轉到指定的一個頁面,那么ngRoute已經滿足了我們的需求,而當我們點擊的時候,需要在分別在不同的地方跳轉兩個不同的頁面的時候,ngRoute就不夠用了,我們就需要用到ui-router。
這里我們還是先來學習下ui-router(一些簡單的服務和用法)
ui-router
$urlRouterProvider
$urlRouterProvider負責監聽$location.當$location變化的時候,$urlRouterProvider開始在一個規則的列表中一個個的查找,直到找到匹配的值。$urlRouterProvider用于在后端指定url的狀態配置。所有的url被編譯成UrlMatcher對象。
依賴: $urlMatcherFactoryProvider $locationProvider
方法:
deferIntercept(defer);
禁用(或啟用)延遲location變化的攔截。如果你想定制與URL同步的行為(例如,你需要保持當前的URL去并且推遲一個變化),那么在配置的時候使用這個方法。
參數:
defer:boolean,確定是禁止還是啟用該攔截。
代碼:
angular.module('Demo',['ui.router']) .config(["$urlRouterProvider",function(){ $urlRouterProvider.deferIntercept(defer); // defer = true/false }])這是源碼部分:
this.deferIntercept = function (defer) { if (defer === undefined) defer = true; interceptDeferred = defer; // 默認是true };otherwise(rule);
定義一個當請求的路徑是無效路徑時跳轉的路徑。
rule:你想重定向的url路徑或一個返回的網址路徑的規則函數。函數傳入兩個參數:$injector和$location服務,而且必須返回一個string的url。
代碼:
angular.module('Demo',['ui.router']) .config(["$urlRouterProvider",function(){ $urlRouterProvider.otherwise(rule); // rule = 重定向的url規則 }])rule(rule);
定義使用$urlRouterProvider 來匹配指定的URL的規則。
參數:
rule:將$injector和$location作為arguments傳入的處理函數。用來返回一個string類型的url路徑。
代碼:
angular.module('Demo',['ui.router']) .config(["$urlRouterProvider",function($urlRouterProvider){ $urlRouterProvider.rule(function ($injector, $location) { var path = $location.path(), normalized = path.toLowerCase(); if (path !== normalized) { return normalized; } }); }])
新聞熱點
疑難解答
圖片精選