Как отключить изменения URL с помощью угловой маршрутизации - PullRequest
0 голосов
/ 07 ноября 2018

Мое приложение Angular 7 должно отображаться в iFrame. Из-за специфического характера системы мне нужно предотвратить изменение URL, или, может быть, я должен сказать, что мне нужно, чтобы Angular не ожидал, что URL изменится.

Я нашел сообщения, которые показывают, как предотвратить это при определенных вызовах маршрутизации, но URL обновляется, когда приложение загружается тоже.

Цель состоит в том, чтобы поддерживать URL-адрес, например: website.com/applicaition, даже когда маршрут изменяется таким образом, что нет обновления для window.location.

https://website.com/application [желательно для каждого просмотра] https://website.com/application/home [НЕ требуется для ЛЮБОГО просмотра]

Спасибо, Wayne

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Лучшим подходом было бы реализовать защиту маршрута на корневом маршруте (или подстановочный знак), который просто всегда возвращает false.

@NgModule({
  imports: [
    RouterModule.forRoot([
      {
        path: '**',
        canActivate: [NeverActivate]
      }
    ])
  ],
  providers: [NeverActivate, UserToken, Permissions]
})


@Injectable()
class NeverActivate implements CanActivate {

  canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<boolean>|Promise<boolean>|boolean {
    return false; // never allow activation
  }
}
0 голосов
/ 07 ноября 2018

Если вы не хотите обновлять URL, вам нужно сделать две вещи.

Сначала добавьте:

{ initialNavigation: false }

к настройкам роутера вот так:

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: '**', component: HomeComponent }
];

@NgModule({
  imports: [RouterModule.forRoot(routes, { initialNavigation: false })],
  exports: [RouterModule]
})

К сожалению, я не смог найти способ обновить это глобально, поэтому вам нужно будет установить следующее для каждой точки навигации в приложении.

С роутером:

<a routerLink="/home" routerLinkActive="active" skipLocationChange="true" >Home</a>

С помощью навигационных звонков:

router.navigate(['/home', { skipLocationChange: true }];

Надеюсь, это поможет!

...