Мне нужно перехватить намеченный маршрут на стороне клиента с помощью механизма правил Azure CDN (Verizon) и превратить путь в строку запроса, которая добавляется к правилу перезаписи, например:
https://my.site.com/feature-b
становится http://my.site.com/index.html?route=feature-b
.
Таким образом, глубокие ссылки могут обслуживаться с полностью статического CDN - за копейки.
Следующее решение работает с конца Angular, однако у меня есть сильное подозрение, что это не Angular-путь. Пожалуйста, помогите мне понять, как это может быть переписано как средство определения маршрута или охрана с использованием некоторого DI-совершенства.
import { NgModule } from '@angular/core';
import { RouterModule, Routes, Router } from '@angular/router';
import { FeatureAComponent } from './features/feature-a/feature-a.component';
import { FeatureBComponent } from './features/feature-b/feature-b.component';
const routes: Routes = [
{ path: 'index.html', component: FeatureAComponent },
{ path: '', redirectTo: '/feature-a', pathMatch: 'full' },
{ path: 'feature-a', component: FeatureAComponent },
{ path: 'feature-b', component: FeatureBComponent }
];
@NgModule({
exports: [ RouterModule ],
imports: [ RouterModule.forRoot(routes) ]
})
export class AppRoutingModule {
private readonly _routeParam = '?route=';
constructor(private router: Router) {
this.navigateToQueryStringRoute();
}
/** If the query string contains route parameter, then unpack it and navigate properly */
navigateToQueryStringRoute() {
if (location.href.indexOf(this._routeParam) < 0) { return; }
const route = location.href.substring(location.href.indexOf(this._routeParam) + this._routeParam.length);
this.router.navigate([route]);
}
}