Angular route.navigate на основе маршрута, указанного в качестве параметра строки запроса (для Azure CDN) - PullRequest
0 голосов
/ 20 марта 2019

Мне нужно перехватить намеченный маршрут на стороне клиента с помощью механизма правил 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]);
  }

}
...