1. 需求
最近接到一個(gè)新需求,需要在公司的后臺(tái)管理項(xiàng)目上,點(diǎn)擊當(dāng)前 tab 頁(yè)面刷新刨沦,并且組件內(nèi)的狀態(tài)重置。
2. 查找
經(jīng)過(guò)查找膘怕,找到如下代碼:
app.routing.ts:
@ngModule({
imports: [RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'})],
exports: [RouterModule],
})
上面代碼好用想诅,但是只是路由刷新,雖然路由系統(tǒng)里面的事件也都能重新加載岛心,但是路由對(duì)應(yīng)的頁(yè)面狀態(tài)并沒(méi)有重置来破。
3. 思考 & 結(jié)果
其實(shí)實(shí)現(xiàn)這個(gè)功能思路也很簡(jiǎn)單,可以建一個(gè)空白頁(yè)面忘古,判斷當(dāng)前點(diǎn)擊的路由是否是當(dāng)前頁(yè)面徘禁,如果相等,則先定位到空白頁(yè)面髓堪,然后再跳轉(zhuǎn)回來(lái)送朱,這樣就能實(shí)現(xiàn)需求了娘荡。
Angular 作為一個(gè)大而全的框架,當(dāng)然也有對(duì)應(yīng)的方法驶沼,如下:
this.router.navigateByUrl('/blank', {skipLocationChange: true})
.then(()=>this.router.navigate([<route>]));
router 下的 navigateByUrl 函數(shù)返回一個(gè) Promise, skipLocationChange 表示是否將新?tīng)顟B(tài)推入歷史記錄炮沐。經(jīng)過(guò)我的測(cè)試它為 true 時(shí),點(diǎn)擊跳轉(zhuǎn)的時(shí)候回怜,url 地址沒(méi)有發(fā)生改變大年,為 false 時(shí)發(fā)生了改變。