摘要:要做到這一點(diǎn),有三個(gè)必不可少的步驟,分別是創(chuàng)建根路由模塊定義路由配置添加指令標(biāo)簽。下面的代碼以路由配置為參數(shù),通過調(diào)用方法來創(chuàng)建根路由模塊,并將其導(dǎo)入到應(yīng)用的根模塊中。
概述
路由所要解決的核心問題就是通過建立URL和頁面的對(duì)應(yīng)關(guān)系,使得不同的頁面可以用不同的URL來表示。
Angular路由的核心工作流程圖
首先,當(dāng)用戶在瀏覽器上輸入U(xiǎn)RL后,Angular將獲取該URL并將其解析生成一個(gè)UrlTree實(shí)例
其次,在路由配置中尋找并激活與UrlTree實(shí)例匹配的配置項(xiàng)
再次,為配置項(xiàng)中指定的組件創(chuàng)建實(shí)例
最后,將該組件渲染于路由組件的模板中
Angular路由最為基本的用法是將一個(gè)URL所對(duì)應(yīng)的組件在頁面中顯示出來。要做到這一點(diǎn),有三個(gè)必不可少的步驟,分別是創(chuàng)建根路由模塊、定義路由配置、添加
根路由模塊包含了路由所需要的各項(xiàng)服務(wù),是路由工作流程得以正常執(zhí)行的基礎(chǔ)。
下面的代碼以路由配置rootRouterConfig為參數(shù),通過調(diào)用RouterModule.forRoot()方法來創(chuàng)建根路由模塊,并將其導(dǎo)入到應(yīng)用的根模塊AppModule中。
app-routing.module.ts
const rootRouterConfig: Routes = [ { path: "add", component: AddComponent, }, { path: "list", component: ListComponent, }, { path: "", redirectTo: "add", pathMatch: "full", }, { path: "**", redirectTo: "add", pathMatch: "full", } ]; @NgModule({ imports: [RouterModule.forRoot(rootRouterConfig)], exports: [RouterModule] }) export class AppRoutingModule { }
path 不能以斜杠 / 開頭
** 通配符路由,不滿足以上路徑時(shí),選擇此路由
路由策略 HashLocationStrategyhttp://localhost:4200/#/add
HashLocationStrategy是Angular路由最為常見的策略,其原理是利用了瀏覽器在處理hash部分的特性
瀏覽器向服務(wù)器發(fā)送請(qǐng)求時(shí)不會(huì)帶上hash部分的內(nèi)容,更換URL的hash部分不會(huì)向服務(wù)器重新發(fā)送請(qǐng)求,這使得在進(jìn)行跳轉(zhuǎn)的時(shí)候不會(huì)引發(fā)頁面的刷新和應(yīng)用的重新加載
使用該策略,只需要在注入路由服務(wù)時(shí)使用useHash屬性進(jìn)行顯示指定即可
app-routing.module.ts
@NgModule({ imports: [RouterModule.forRoot(rootRouterConfig, { useHash: true })], exports: [RouterModule] })HashLocationStrategy 路由跳轉(zhuǎn)
Web應(yīng)用中的頁面跳轉(zhuǎn),指的是應(yīng)用響應(yīng)某個(gè)事件,從一個(gè)頁面跳轉(zhuǎn)到另一個(gè)頁面的行為。對(duì)于Angular構(gòu)建的單頁面而言,頁面跳轉(zhuǎn)實(shí)質(zhì)上就是從一個(gè)配置項(xiàng)跳轉(zhuǎn)到另一個(gè)配置項(xiàng)的行為。
指令跳轉(zhuǎn)指令跳轉(zhuǎn)通過使用RouterLink指令來完成,該指令接收一個(gè)鏈接參數(shù)數(shù)組,Angular將根據(jù)該數(shù)組生成UrlTree實(shí)例進(jìn)行跳轉(zhuǎn)
addlist
第一個(gè)參數(shù)名可以使用 /、./ 或 ../ 前綴
如果第一個(gè)片段用 / 開頭,則路由器會(huì)從應(yīng)用的根路由開始查找
如果第一個(gè)片段用 ./ 開頭或者沒有用斜杠開頭,路由器就會(huì)從當(dāng)前激活路由開始查找
如果第一個(gè)片段以 ../ 開頭,則路由器將會(huì)向上找一級(jí)
RouterLink指令可以被應(yīng)用到任何HTML元素上,使得頁面跳轉(zhuǎn)不需要依賴超鏈接。
代碼跳轉(zhuǎn)RouterLink指令通過響應(yīng)click事件實(shí)現(xiàn)頁面跳轉(zhuǎn),如果需要響應(yīng)其他事件或者根據(jù)運(yùn)行時(shí)動(dòng)態(tài)跳轉(zhuǎn),則可以通過Router.navigateByUrl或Router.navigate來完成。
add() { this.router.navigateByUrl("/add"); } list() { this.router.navigate(["/list"]); }路由參數(shù) Path參數(shù)
Path參數(shù)通過解析URL的path部分來獲取參數(shù)。
在定義一個(gè)配置項(xiàng)的path屬性時(shí),可以使用/字符來對(duì)path屬性進(jìn)行分段,如果一個(gè)分段以:字符開頭,則URL中與該分段進(jìn)行匹配的部分將作為參數(shù)傳遞給組件中。
app-routing.module.ts
const rootRouterConfig: Routes = [ { path: "add/:id/:name/:age/:sex", component: DetailComponent, } ];detail 1 tao1 30 man
在組件中獲取Path參數(shù),需要導(dǎo)入ActivatedRoute服務(wù),該服務(wù)提供了兩種方式處理頁面之間的跳轉(zhuǎn)。
不同頁面Angular應(yīng)用從一個(gè)頁面跳轉(zhuǎn)到另一個(gè)新的頁面,實(shí)質(zhì)就是從一個(gè)配置項(xiàng)跳轉(zhuǎn)到另一個(gè)配置項(xiàng)。在這個(gè)過程中,Angular除了會(huì)為配置項(xiàng)所對(duì)應(yīng)的組件創(chuàng)建實(shí)例外,還會(huì)為該配置項(xiàng)創(chuàng)建一個(gè)ActivatedRoute實(shí)例來表示該配置項(xiàng)已被激活,該ActivatedRoute實(shí)例包含一個(gè)快照(snapshot),記錄了從當(dāng)前URL解析出來的所有path參數(shù)。
ngOnInit() { console.log(this.activatedRouter.snapshot.params); } {id: "1", name: "tao", age: "30", sex: "man"}同一頁面
Angular在處理同一頁面時(shí),不會(huì)重現(xiàn)創(chuàng)建組件的實(shí)例,所以構(gòu)造函數(shù)和ngOnInit()方法不會(huì)被調(diào)用。雖然Angular會(huì)將快照中參數(shù)更新,但是沒有將值更新到組件。為了解決這個(gè)問題,ActivatedRoute服務(wù)提供了一個(gè)Observable對(duì)象,允許對(duì)參數(shù)的更新進(jìn)行訂閱。組件銷毀的時(shí)候要取消訂閱。
this.activatedRouter.params.subscribe(value => { console.log(value); }) ngOnDestroy() { this.sub.unsubscribe(); }Query參數(shù)
由于URL的query部分不用和配置項(xiàng)進(jìn)行匹配,因此每一個(gè)配置項(xiàng)可以擁有任意多個(gè)查詢參數(shù)。
http://localhost:4200/list?limit=10
Query參數(shù)同樣可以通過RouterLink指令或者跳轉(zhuǎn)方法來賦值
>detail limit 10>detail limit 30
Query參數(shù)的獲取,需要借助ActivatedRoute服務(wù)提供的Observable對(duì)象的queryParams來完成。
this.sub2 = this.activatedRouter.queryParams.subscribe(value => { console.log(value); }) // {limit: "10"}路由攔截
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/106058.html
摘要:路由過程的個(gè)步驟每次點(diǎn)擊鏈接或?yàn)g覽器改變時(shí),路由器都會(huì)確保應(yīng)用程序做出相應(yīng)的反應(yīng)。一旦所有的都已完成,其返回值是合并的路徑的然后路由器繼續(xù)步驟。你可以使用助記記住路由器經(jīng)過的步驟的順序。 路由過程的7個(gè)步驟 每次點(diǎn)擊鏈接或?yàn)g覽器URL改變時(shí),Angular路由器都會(huì)確保應(yīng)用程序做出相應(yīng)的反應(yīng)。 為了做到這一點(diǎn),Angular路由器執(zhí)行以下7個(gè)步驟的順序: 解析(Parse):它解析...
摘要:啟動(dòng)服務(wù),并打開新窗口可簡寫創(chuàng)建新組件可簡寫創(chuàng)建新服務(wù)創(chuàng)建路由模塊其他另外還有很多的命令提供,詳細(xì)可以查閱官方文檔命令。引入路由模塊導(dǎo)出路由模塊的指令這里需要添加一個(gè)數(shù)組,并傳入,導(dǎo)出讓路由器的相關(guān)指令可以在中的組件中使用。 本文目錄 一、項(xiàng)目起步 二、編寫路由組件 三、編寫頁面組件 1.編寫單一組件 2.模擬數(shù)據(jù) 3.編寫主從組件 四、編寫服務(wù) 1.為什么需要服務(wù) 2....
摘要:為了做到這一點(diǎn),我創(chuàng)建了一個(gè)服務(wù)提供商,通過的消息推送來實(shí)現(xiàn)。最后聲明一個(gè)來發(fā)送修改過的對(duì)象。根組件,創(chuàng)建它并插入宿主頁面。路由的作用是在找不到任何路由時(shí),訪問組件。定義路由數(shù)組后,用裝飾器導(dǎo)入,并將路由數(shù)組傳遞給的數(shù)組。 上一篇文章對(duì)用戶發(fā)來的注冊(cè)和登錄信息進(jìn)行了處理,并實(shí)現(xiàn)了將注冊(cè)用戶信息插入到mysql數(shù)據(jù)庫的數(shù)據(jù)表和從mysql數(shù)據(jù)庫的數(shù)據(jù)表中查詢到用戶的登錄信息并返回用戶認(rèn)證...
閱讀 2114·2023-04-26 00:16
閱讀 3556·2021-11-15 11:38
閱讀 3235·2019-08-30 12:50
閱讀 3242·2019-08-29 13:59
閱讀 806·2019-08-29 13:54
閱讀 2595·2019-08-29 13:42
閱讀 3378·2019-08-26 11:45
閱讀 2248·2019-08-26 11:36