angular js如何配置 ui router


 

 

背景介紹

 

什么是ui-router?,

AngularUI Router是AngularUI 團隊開發的一個AngularJS路由模塊,相比AngularJS的標准路由ngRoute,它更靈活。與集成的ngRoute服務不同的是,UI-Router可以將視圖嵌套,因為它基於的是操作狀態而僅非URL。

 

 

與傳統做法使用ng-view不同的是,在ui-Route里需要使用ui-view服務。當在ui-router中處理路由和狀態時,開發者的重心是當前的狀態是什么以及在哪一個頁面里。

UI-Router被認為是AngularUI為開發者提供的最實用的一個模塊,它是一個讓開發者能夠根據URL狀態來組織和控制界面UI的渲染,而不是僅僅只改變路由(傳統AngularJS應用實用的方式)。

該模塊為開發者提供了很多視圖(view)的控制。開發者可以創建嵌套分層的視圖、在同一個頁面使用多個視圖、讓多個視圖控制某個視圖等更多的功能。

即使是非常復雜的web應用,UI-Router也可以極佳地駕馭。

 

 

 

知識刨析

 

什么是router

在web開發中,router是根據jur分配到對應的處理程序,我們也可以說,路由的作用就是解析url地址,根據路由狀態,來決定當前是在那個頁面。

 

客戶端的請求是,以url的形式傳遞給服務器,在傳統的開發中,urld對應服務器上某個目錄上的文件。而在MVC開發則是改變了z這種對應關系,web服務器會截獲所以請求,不會檢測我們的資源是否存在,直接發給網頁路由器,路由器在調用相關的控制器,控制器d調用相關的服務,然后路由器再從視圖對象中,提取生好的網頁代碼返回web服務器最終返回客戶端。

 

 

為什么要使用路由呢?

 

在傳統的web開發中,每一個請求地址都會讓服務器去進行處理,但是用戶有些操作時無需請求服務的,直接頁面端修改一下邏輯就可以達到目的。這種情況下我們最好的方法就是使用路由。

 

也許有人會問,這個時候,我們直接使用js去處理不就行了,使用js直接處理時可以的。事實上之前也是這么干的。但是這樣做不方便用戶收藏當前頁面。因為js時不會更強url地址的。

但是我們使用路由的話,url隨着改變的,用戶瀏覽到網頁可以直接進行復制,或者是收藏當前頁的url給別人,這樣無論是對用戶還是對搜索引擎來說,都i是友好的。

 

簡單的說,不使用路由的話,使用js加載頁面會導致,在用戶體驗上面會是一場在災難。你能想象的出,你找到一篇博客,然后無法把內容的地址給保存下來的感覺嗎?

 

 

常見問題,

如何使用,angular ui-router。

 

解決問題

 

方法1,我們使用包管理器,yarn,bower,npm這種來使用命令行進行安裝。

方法2,bootcdn,引入文件。注(在此之前我們必須要引入jquery,與angular.js)

 

第二步,搭建我們的路由。

 

 

在此之前,我們必須要保證,自己引入的文件順序以及cdn可以正常訪問。可以在谷歌瀏覽器里,f12,network里面查看。

 

此后,html於js,聲明angular.js主模塊,並把ui-router傳入主模塊。

 

 

<html lang="en" ng-app="myApp">
var myApp = angular.module("myApp",['ui.router']);

 

 

下面, 聲明$stateProvider,並且把$urlRouteProvider ,作為路由引擎作為函數參數傳入。

myApp.config(function ($stateProvider,$urlRouterProvider) {

 

默認路由頁面。如果沒有路由引擎能匹配當前的導航轉來,就默認講展示background頁面。

$urlRouterProvider.when("", "/background");

 

頁面加載好,被第一個使用的路由。

.state("background",{
   url:"/background",//url地址
   templateUrl:"vivw/background.html",//加載的html模板
})

 

angualr uirouter最強大的地方,在於,可以使用它去跳轉傳參,以及可以進行路由嵌套。

 

我們先說路由嵌套。

 

 

嵌套視圖時ui-router於ng-router最大的區別,這也是備受青睞的原因。

在使用嵌套視圖的時候,我們必須要的子視圖之前必須加上上一層視圖的狀態名。


.state("background.login",{
   url:"/login",
   templateUrl:"vivw/login.html."
})

background頁面需要設置,vive,為了發給其他視圖顯示的地方。

 

 

使用跳轉傳參的話,我們需要注意的點在於,首先在路由上面parms,或者url,parms設置要接受的參數,並且值為null。

.state("red",{
   url:"/red",
   params:{"test":null},
   templateUrl:"vivw/red.html",
})

 

 

然后·我們在目標頁面的控制器里面注入$stateparms獲取參數就行了。

myApp.controller("red",function ($scope,$state,$stateParams) {
   $scope.skip=function () {

       $state.go("background.login")
   };
   $scope.look=function () {
       console.log($stateParams);
       console.log($stateParams.obj);
   }
});

 

 

擴展思考

 

那么什么是,url呢?

 

uri俗稱網頁地址,直譯的話,是統一資源定位符。但是網頁地址並不是http,和https,網址url,和鏈接lick,超鏈接hyperlinkk。關系有些微妙。

 

uri的意思是統一資源標識符,在互聯網中就是通過uri來訪問互聯網資源的,uri分出來了2個子集,一個是我們常常聽到提起的,url,另一個就是urn。

 

uri更傾向於,標識我們的這個資源是什么東西。

 

url跟urI的的名字有點接近,是統一資源定位符,我們可以通過url,准確的定位一個資源的位置,並且去訪問它,url地址就是該文件在服務器的根目錄的相對路徑。

 

urn,是表示一個實體的標記符,但是不能給你資源的位置,我不知道這個資源在哪,但是我知道這個資源的名字

,id,我就可以找到你。

 

 

更多討論

 

Q1:

ng-router和ui-router有什么區別?

A1:

ngRoute在路由配置時用$routeProvider。

ui-router路由配置時用 $stateProvider 和$urlRouterProvider。

ngRoute是官方路由。

ui-route是第三方路由。

ngroute是用AngularJS框架的核心部分。

ui-router是一個社區庫,它是用來提高完善ngroute路由功能的。

ui-router允許嵌套視圖(nested views)和多個命名視圖(multiple named views)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM