如何使用ui-router?

大家好,我是IT修真院深圳分院第04期學員,一枚正直善良的web程序員。

今天給大家分享一下,修真院官網 js任務中會使用到的知識點:

如何使用ui-router?


1.背景介紹

Angular.js是一個用來構建“富客戶端”的神奇JavaScript框架。但是事實卻是許多開發者卻不使用其內置的路由模塊。反而使用AngularUI項目的

UI-Router模塊來代替之。

這是因為UI-Router有兩個重要的特性:

*多樣化視圖

*嵌入式視圖


多樣化視圖

大多數的應用程序都可以分解為一個一個區塊。最簡單的情況,一個應用程序有頭部(header),主體內容(main content

area),以及一個尾部(footer)。通常一個應用程序會有一個額外的側邊欄(sidebar)在頁面的左邊或者右邊,大多數用例中,這些區塊將同時顯示在頁面上。

Angular.js的內置路由ngRoute只允許一個視圖(ng-view)出現在頁面上。這樣限制的情況下,人們可以使用包含頁面(ng-include)或者

其他的變通方法為應用創建一個布局(layout)或主頁(master page)。

UI-Router支持多樣化視圖,并且每一個視圖都有自己相應的控制,所以每個區塊都是封裝好,可以復用到整個應用程序需要的地方。


嵌入式視圖

常見的例子中,一個應用的嵌入式頁面一般是主頁的詳情頁面,更具體的說,就是列表的詳情頁面。許多應用程序,都有列表頁面,點擊其中一個列表元素,可以進入到列表的詳情頁面。更進一步說,你點擊列表中一個行的連接,進入一個可查看詳情頁面或是一個可編輯的表單。

如果列表頁面和詳情頁面是單獨分開的(或者他們被Angujar.js回調),使用Angular.js的內置路由ngRoute是非常容易完成的。然而,如果你想要保持列表不變,而詳情頁面出現在列表的右邊或者下面,這樣就變得非常具有挑戰性了。

需要澄清的是,這樣的要求可以使用ngRoute來完成。但是你需要讓兩個控制器(一個用于列表,一個用于顯示和隱藏詳情)共享一個視圖。這樣的結果不是理想的,因為我們想要列表和詳情頁面有各自的控制器和視圖,并且職責單一(顯示列表或者顯示列表項目的詳情)。封裝這些用戶接口模塊到它們各自的視圖,這樣我們就有更多的“可組合UI”,允許我們將各個區塊整合到一起,或者根據需求拆分。嵌入式視圖,不僅能夠讓這些視圖同時出現,還能讓一個視圖嵌入到另一個視圖中。


2.知識剖析

第一行,聲明AngularJS模塊,并把ui-router傳入AngularJS主模塊,所有的結合起來我們就得到了Angular模塊。

與集成的ngRoute服務不同的是,UI-Router可以將視圖嵌套,因為它基于的是操作狀態而僅非URL。與傳統做法使用ng-view不同的是,在ngRoute里需要使用ui-view服務。當在ui-router中處理路由和狀態時,開發者的重心是當前的狀態是什么以及在哪一個頁面里。

和ngRoute一樣,為特定狀態指定的模板將會放在ui-view元素中。在這些模板中也可以包含自己的ui-view,這就是在同一個路由下實現嵌套視圖的方法。要定義一個路由,與傳統的方法相同:使用.config方式,但使用的不是$routeProvider而是$stateProvider。

$stateProvider:管理狀態定義、當前狀態和狀態轉換。包含觸發狀態轉換的事件和回調函數,異步解決目標狀態的任何依賴項,更新$location到當前狀態。由于狀態包含關聯的url,通過$urlRouterProvider生成一個路由規則來執行轉換的狀態。

$urlRouterProvider:管理了一套路由規則列表來處理當$location發生變化時如何跳轉。最低級的方式是,規則可以是任意函數,來檢查$location,并在處理完成時候返回true。支持正則表達式規則和通過$urlMatcherFactory編譯的UrlMatcher對象的url占位符規則。

ui-view指示器:渲染狀態中定義的視圖,是狀態中定義的視圖的一個占位符。

模板,模板路徑,模板Provider

上述代碼在設置對象上定義了一個叫start的狀態。設置對象stateConfig和路由設置對象的選項是非常相似的。開發者可以在每個視圖下使用如下方式來設置模板template -

HTML字符串,或者是返回HTML字符串的函數templateUrl - HTML模板的路徑,或者是返回HTML模板路徑的函數templateProvider,返回HTML字符串的函數.

url選項將會為該應用的狀態指定一個URL基于用戶瀏覽該應用所在的狀態。這樣當在瀏覽該應用的時候便能實現深度鏈接的效果。

Views視圖

開發者可以在同一個模板中改變和切換不同的視圖。如果設置了視圖選項,則該狀態的‘template’,‘templateUrl’及‘templateProvider’將被忽略。如果想在路由里包含父級模板,就需要創建一個包含模板的抽象模板。例如:

該函數需要兩個參數:1.當前的路徑,2.需要重定向到的路徑(或者是需要在路徑被訪問是運行的函數)。設置重定向前需要為$urlRouterProvider設置when函數來接受一個字符串。例如,當希望重定向一個空的路由到/inbox:

otherwise()

和ngRoute的otherwise()函數相似,在用戶提交的路徑沒有被定義的時候它將重定向到指定的頁面。這是個創建’默認‘路徑的好方法。

otherwise()只接受一個參數,要么函數要么字符串,字符串必須為合法的url路由地址,函數則會在沒有任何路徑被匹配的時候被運行。


3.常見問題

如何激活狀態?

有三種方式來激活特定的狀態

使用ui-sref綁定的連接

直接導航到與狀態關聯的url

使用$state.go()方法


4.解決方案

5.編碼實戰

6.擴展思考

如何進行嵌套路由?

7.參考文獻

AngularJS ui-router (嵌套路由)


8.更多討論

為什么綁定標簽src屬性不解析ui-route嵌套路由?

angular.js中出于安全考慮,將帶有http://的網絡地址 當做一個不安全的地址,所以需要對這個地址進行處理才能使用

嵌套路由首先得引用ui-route.min.js文件

使用$sce.trustAsResourceUrl('xxx') 方法把這個字符串地址聲明為受信任的地址就可以





小課堂【深圳第342期】如何使用ui-router?

感謝大家觀看!

今天的分享就到這里啦,歡迎大家點贊、轉發、留言、拍磚!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,441評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,475評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,834評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,009評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,559評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,306評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,516評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,728評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,249評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,484評論 2 379

推薦閱讀更多精彩內容