詳解Angular路由 ng-route和ui-router的區(qū)別
什么是路由?
路由是AngularJS構(gòu)建單頁面應(yīng)用的基礎(chǔ)。
路由,就是網(wǎng)絡(luò)數(shù)據(jù)或者請求進行分發(fā)的一個網(wǎng)絡(luò)組件。
路由就是一個用于請求URL分發(fā)和跳轉(zhuǎn)的一個應(yīng)用組件,Angular中通過$routeProvider路由服務(wù)提供者進行核心的配置處理。
ng路由
ng 路由是 AngularJS 官方提供的一種簡單的路由操作。
ng 路由主要分三個組成部分:路由指令、路由服務(wù)、路由服務(wù)提供者
路由指令:ng-view
ngView指令主要用于將路由指向的頁面渲染到當前頁面的布局中。
語法:
<ng-view [onload=”string”] [autoscroll]=”string”></ng-view>
- onload:當視圖發(fā)生改變時執(zhí)行屬性值中的表達式
- autoscroll:當視圖發(fā)生改變時自動觸發(fā)$anchorScroll事件
事件:
路由視圖一旦加載時,就會自動觸發(fā)$viewContentLoaded 事件
路由提供者:$routeProvider
描述:
內(nèi)置服務(wù)對象 內(nèi)置服務(wù)對象 $routeProvider $routeProvider $routeProvider 主要用于進行路由配置 主要用于進行路由配置
該服務(wù)的使用必須依賴 該服務(wù)的使用必須依賴 該服務(wù)的使用必須依賴 ngRoute 模塊,也就是項目中必須添加 模塊,也就是項目中必須添加 animate-route.js
主要方法:
when( path, route); 用于在訪問 path 路徑時,跳轉(zhuǎn)到 route 指定的視圖 |-- path:路由跳轉(zhuǎn)的徑 |-- route:路由對象 <組件 對象 >,一個 JSON對象 otherwise(params);用于在訪問不存的路徑時,跳轉(zhuǎn)的默認路徑或者視圖 |-- params:指定路徑或者路由對象
內(nèi)置服務(wù)<路由服務(wù)>:$route &$routeParams
$route 服務(wù)被用于進行深層超鏈接信息的描述, 它會監(jiān)聽 它會監(jiān)聽 $location.url() 地址并進行url 地址和指定的路由視圖之間映射關(guān)系。
$routeParams服務(wù)允許開發(fā)人員可以進行路由中參數(shù)的處理。
ui路由
Angular官方提供的 ng 路由已經(jīng)具備了非常強大的功能,但是在某些情況下存在一些不太好用的地方,項目中如果出現(xiàn)大量路由深層嵌套話官方的ng路由來處理就不是非常適合了。
第三方提供了一種強大的路由處理功能,對于路由嵌套也可以非常簡單的進行處理。
ui-route:ui路由,第三方路由
ui路由,主要的功能是項目中的路由操作,和官方的ng路由相比較,它的處理方式更加簡潔和易用,尤其是涉及到項目中大量路由嵌套時,使用ui路由能更加快捷方便的完成項目中路由的跳轉(zhuǎn)處理。
ui-view:指令
ui -view是 ui 路由中模板頁面用于數(shù)據(jù)展示的指令,可以作為標簽的屬性出現(xiàn),同樣也可以作為標簽的屬性出現(xiàn)
<div ui -viewviewviewview></div>> <ui -view></uiview>
同時可以給 ui -view 指令命名,用于在路由跳轉(zhuǎn)時對應(yīng)名稱的 ui -view 上展示對應(yīng)的數(shù)據(jù)
總結(jié):兩者區(qū)別
① ng路由實現(xiàn)不了多頁面應(yīng)用
② ui路由:更加方便地處理路由嵌套,在state()函數(shù)中進行即可。
③ngRoute 和 ui-route 相比:
$when —> $state 路由狀態(tài)配置的時候
$routeParams —> $stateParams 帶參數(shù)的時候的配置
$routeProvider —> $stateProvider 依賴注入的模塊
<div ng-view></div> —> <div ui-view></div> 頁面中綁定的指令
④ uiRoute中可以嵌套更深層次的路由,也就是路由中可以有路由(大致有兩種情況:1.橫向的 2.縱向的)。
?。?)嵌套路由
?。?)多視圖路由
ngRoute中就不能嵌套更深的路由。
用代碼看一下兩者的區(qū)別:
ng路由:首先要配置注冊 ngRoute
代碼如下:
var app = angular.module(“myApp", ['ngRoute']); app.config(["$routeProvider",function($routeProvider){ }]);
ui路由:用hello world舉例子:
<!DOCTYPE html> <html ng-app="myApp"> <head> <meta charset="UTF-8"> <title>ui-route</title> <script src="js/lib/angular.min.js" ></script> <script src="js/lib/angular-ui-router.min.js"></script> </head> <style type="text/css"> .active{ color:red; font-weight:bold; } </style> <body> <ul> <li><a ui-sref="hello" ui-sref-active='active'>Hello</a></li> <li><a ui-sref="world" ui-sref-active='active'>world</a></li> </ul> <div> <ui-view></ui-view> </div> </body> <script> var app=angular.module("myApp",["ui.router"]); /* $stateProvider: Ui路由中的狀態(tài)服務(wù)提供者 */ app.config(["$stateProvider","$urlRouterProvider",function($stateProvider,$urlRouterProvider){ $urlRouterProvider.otherwise("/hello"); $stateProvider.state({ name:"hello", url:"/hello", template:"<h1>這是hello對應(yīng)的內(nèi)容</h1>" }).state({ name:"world", url:"/world", template:"<h1>這是world跳轉(zhuǎn)之后對應(yīng)的內(nèi)容</h1>" }); }]); </script> </html>
效果如下:
這是簡單的一個單頁面跳轉(zhuǎn),有興趣可以思考一下多頁面應(yīng)用。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
AngularJS控制器controller正確的通信的方法
AngularJS中的controller是個函數(shù),用來向視圖的作用域($scope)添加額外的功能,我們用它來給作用域?qū)ο笤O(shè)置初始狀態(tài),并添加自定義行為2016-01-01詳解Angular系列之變化檢測(Change Detection)
這篇文章主要介紹了詳解Angular系列之變化檢測(Change Detection),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02Angular動態(tài)綁定樣式及改變UI框架樣式的方法小結(jié)
AngularJS 是一個 JavaScript 框架。它是一個以 JavaScript 編寫的庫。這篇文章主要介紹了Angular動態(tài)綁定樣式及改變UI框架樣式的方法小結(jié),需要的朋友可以參考下2018-09-09AngularJs IE Compatibility 兼容老版本IE
本文主要介紹AngularJs IE Compatibility 兼容老版本IE的問題及解決辦法,有興趣的小伙伴可以參考下2016-09-09AngularJS實踐之使用ng-repeat中$index的注意點
最近通過客戶的投訴主要到在ng-repeat中使用了$index引發(fā)的一個bug,下面一起來看看這個錯誤是如何引發(fā)的, 以及如何避免這種bug產(chǎn)生,然后說說我們從中得到的經(jīng)驗和教訓(xùn)。有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-12-12Angular 利用路由跳轉(zhuǎn)到指定頁面的指定位置方法
今天小編就為大家分享一篇Angular 利用路由跳轉(zhuǎn)到指定頁面的指定位置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08AngularJS ng-repeat指令及Ajax的應(yīng)用實例分析
這篇文章主要介紹了AngularJS ng-repeat指令及Ajax的應(yīng)用,結(jié)合實例形式分析了ng-repeat指令的功能及ajax請求交互相關(guān)操作技巧,需要的朋友可以參考下2017-07-07詳解Angular的內(nèi)置過濾器和自定義過濾器【推薦】
在實際的開發(fā)過程中,很多后端返回給我們的數(shù)據(jù)都是需要格式化處理的,在angular中為我們內(nèi)置提供了filter指令,可以很方便的對數(shù)據(jù)進行處理。本文將對Angular的內(nèi)置過濾器和自定義過濾器進行詳細介紹,下面跟著小編一起來看下吧2016-12-12詳解webpack+es6+angular1.x項目構(gòu)建
這篇文章主要介紹了詳解webpack+es6+angular1.x項目構(gòu)建, 小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05