大家好!!
最近遇到一個問題路徑大小寫的問題
- /a/Create?ID=1
- /b/create?ID=2
- /c/Create?ID=3
Create or create 這個路徑是存在資料庫(歷史包袱)。
舊網站是不會區分大小寫,所以存入資料庫沒有一定規律,但改寫成 Angular 時,路由會區分大小寫。
目前看了一些解決方式都是整個網址都轉小寫,但不太符合我的需求,不知道 Angular 有沒有什麼參數 ( 類似 AngularJs 的 caseInsensitiveMatch ),或是哪個地方可以自己改寫路由的比對?
網址本來預設就是 case sensitive. 如果真的要處理這種 case, 就變成自己要在程式端動
這部分要改寫 UrlSerializer 的部分
類似這樣的概念,但其中有很多細節就要留意了
import { DefaultUrlSerializer, UrlTree } from '@angular/router';
export class LowerCaseUrlSerializer extends DefaultUrlSerializer {
parse(url: string): UrlTree {
return super.parse(url.toLowerCase());
}
}
在 root module 的地方註冊成自己的
providers: [
{
provide: UrlSerializer,
useClass: LowerCaseUrlSerializer
}]
這方式之前有嘗試過,但他是把整個網址都轉成小寫,像是
/a/Create?ID=1 => /a/create?id=1
最後選擇還是用資料面的 mapping 解決