摘要:要做到這一點(diǎn),有三個(gè)必不可少的步驟,分別是創(chuàng)建根路由模塊定義路由配置添加指令標(biāo)簽。下面的代碼以路由配置為參數(shù),通過(guò)調(diào)用方法來(lái)創(chuàng)建根路由模塊,并將其導(dǎo)入到應(yīng)用的根模塊中。
概述
路由所要解決的核心問(wèn)題就是通過(guò)建立URL和頁(yè)面的對(duì)應(yīng)關(guān)系,使得不同的頁(yè)面可以用不同的URL來(lái)表示。
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)的組件在頁(yè)面中顯示出來(lái)。要做到這一點(diǎn),有三個(gè)必不可少的步驟,分別是創(chuàng)建根路由模塊、定義路由配置、添加
根路由模塊包含了路由所需要的各項(xiàng)服務(wù),是路由工作流程得以正常執(zhí)行的基礎(chǔ)。
下面的代碼以路由配置rootRouterConfig為參數(shù),通過(guò)調(diào)用RouterModule.forRoot()方法來(lái)創(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 不能以斜杠 / 開(kāi)頭
** 通配符路由,不滿足以上路徑時(shí),選擇此路由
路由策略 HashLocationStrategyhttp://localhost:4200/#/add
HashLocationStrategy是Angular路由最為常見(jiàn)的策略,其原理是利用了瀏覽器在處理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è)面的刷新和應(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)用中的頁(yè)面跳轉(zhuǎn),指的是應(yīng)用響應(yīng)某個(gè)事件,從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面的行為。對(duì)于Angular構(gòu)建的單頁(yè)面而言,頁(yè)面跳轉(zhuǎn)實(shí)質(zhì)上就是從一個(gè)配置項(xiàng)跳轉(zhuǎn)到另一個(gè)配置項(xiàng)的行為。
指令跳轉(zhuǎn)指令跳轉(zhuǎn)通過(guò)使用RouterLink指令來(lái)完成,該指令接收一個(gè)鏈接參數(shù)數(shù)組,Angular將根據(jù)該數(shù)組生成UrlTree實(shí)例進(jìn)行跳轉(zhuǎn)
addlist
第一個(gè)參數(shù)名可以使用 /、./ 或 ../ 前綴
如果第一個(gè)片段用 / 開(kāi)頭,則路由器會(huì)從應(yīng)用的根路由開(kāi)始查找
如果第一個(gè)片段用 ./ 開(kāi)頭或者沒(méi)有用斜杠開(kāi)頭,路由器就會(huì)從當(dāng)前激活路由開(kāi)始查找
如果第一個(gè)片段以 ../ 開(kāi)頭,則路由器將會(huì)向上找一級(jí)
RouterLink指令可以被應(yīng)用到任何HTML元素上,使得頁(yè)面跳轉(zhuǎn)不需要依賴超鏈接。
代碼跳轉(zhuǎn)RouterLink指令通過(guò)響應(yīng)click事件實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn),如果需要響應(yīng)其他事件或者根據(jù)運(yùn)行時(shí)動(dòng)態(tài)跳轉(zhuǎn),則可以通過(guò)Router.navigateByUrl或Router.navigate來(lái)完成。
add() { this.router.navigateByUrl("/add"); } list() { this.router.navigate(["/list"]); }路由參數(shù) Path參數(shù)
Path參數(shù)通過(guò)解析URL的path部分來(lái)獲取參數(shù)。
在定義一個(gè)配置項(xiàng)的path屬性時(shí),可以使用/字符來(lái)對(duì)path屬性進(jìn)行分段,如果一個(gè)分段以:字符開(kāi)頭,則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ù)提供了兩種方式處理頁(yè)面之間的跳轉(zhuǎn)。
不同頁(yè)面Angular應(yīng)用從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)新的頁(yè)面,實(shí)質(zhì)就是從一個(gè)配置項(xiàng)跳轉(zhuǎn)到另一個(gè)配置項(xiàng)。在這個(gè)過(guò)程中,Angular除了會(huì)為配置項(xiàng)所對(duì)應(yīng)的組件創(chuàng)建實(shí)例外,還會(huì)為該配置項(xiàng)創(chuàng)建一個(gè)ActivatedRoute實(shí)例來(lái)表示該配置項(xiàng)已被激活,該ActivatedRoute實(shí)例包含一個(gè)快照(snapshot),記錄了從當(dāng)前URL解析出來(lái)的所有path參數(shù)。
ngOnInit() { console.log(this.activatedRouter.snapshot.params); } {id: "1", name: "tao", age: "30", sex: "man"}同一頁(yè)面
Angular在處理同一頁(yè)面時(shí),不會(huì)重現(xiàn)創(chuàng)建組件的實(shí)例,所以構(gòu)造函數(shù)和ngOnInit()方法不會(huì)被調(diào)用。雖然Angular會(huì)將快照中參數(shù)更新,但是沒(méi)有將值更新到組件。為了解決這個(gè)問(wèn)題,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ù)同樣可以通過(guò)RouterLink指令或者跳轉(zhuǎn)方法來(lái)賦值
>detail limit 10>detail limit 30
Query參數(shù)的獲取,需要借助ActivatedRoute服務(wù)提供的Observable對(duì)象的queryParams來(lái)完成。
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://systransis.cn/yun/106058.html
摘要:路由過(guò)程的個(gè)步驟每次點(diǎn)擊鏈接或?yàn)g覽器改變時(shí),路由器都會(huì)確保應(yīng)用程序做出相應(yīng)的反應(yīng)。一旦所有的都已完成,其返回值是合并的路徑的然后路由器繼續(xù)步驟。你可以使用助記記住路由器經(jīng)過(guò)的步驟的順序。 路由過(guò)程的7個(gè)步驟 每次點(diǎn)擊鏈接或?yàn)g覽器URL改變時(shí),Angular路由器都會(huì)確保應(yīng)用程序做出相應(yīng)的反應(yīng)。 為了做到這一點(diǎn),Angular路由器執(zhí)行以下7個(gè)步驟的順序: 解析(Parse):它解析...
摘要:?jiǎn)?dòng)服務(wù),并打開(kāi)新窗口可簡(jiǎn)寫(xiě)創(chuàng)建新組件可簡(jiǎn)寫(xiě)創(chuàng)建新服務(wù)創(chuàng)建路由模塊其他另外還有很多的命令提供,詳細(xì)可以查閱官方文檔命令。引入路由模塊導(dǎo)出路由模塊的指令這里需要添加一個(gè)數(shù)組,并傳入,導(dǎo)出讓路由器的相關(guān)指令可以在中的組件中使用。 本文目錄 一、項(xiàng)目起步 二、編寫(xiě)路由組件 三、編寫(xiě)頁(yè)面組件 1.編寫(xiě)單一組件 2.模擬數(shù)據(jù) 3.編寫(xiě)主從組件 四、編寫(xiě)服務(wù) 1.為什么需要服務(wù) 2....
摘要:為了做到這一點(diǎn),我創(chuàng)建了一個(gè)服務(wù)提供商,通過(guò)的消息推送來(lái)實(shí)現(xiàn)。最后聲明一個(gè)來(lái)發(fā)送修改過(guò)的對(duì)象。根組件,創(chuàng)建它并插入宿主頁(yè)面。路由的作用是在找不到任何路由時(shí),訪問(wèn)組件。定義路由數(shù)組后,用裝飾器導(dǎo)入,并將路由數(shù)組傳遞給的數(shù)組。 上一篇文章對(duì)用戶發(fā)來(lái)的注冊(cè)和登錄信息進(jìn)行了處理,并實(shí)現(xiàn)了將注冊(cè)用戶信息插入到mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)表和從mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)表中查詢到用戶的登錄信息并返回用戶認(rèn)證...
閱讀 2054·2023-04-26 00:16
閱讀 3513·2021-11-15 11:38
閱讀 3202·2019-08-30 12:50
閱讀 3211·2019-08-29 13:59
閱讀 778·2019-08-29 13:54
閱讀 2543·2019-08-29 13:42
閱讀 3338·2019-08-26 11:45
閱讀 2216·2019-08-26 11:36