Angular 5 router.navigate забирает меня из приложения Angular - PullRequest
0 голосов
/ 28 мая 2018
  • У меня есть проект Angular 4, который я обновил до Angular 5, и я заметил, что маршрутизация ведет себя по-разному, хотя так могло быть всегда.
  • Мой файл index.html содержит<base href="/cool/" /> в элементе <head>.
  • Мой веб-сервер обслуживает содержимое index.html для всех запросов в /cool, например:
    • GET /cool
    • GET /cool/
    • GET /cool/auth
    • GET /cool/auth/
    • GET /cool/somethingElse/
    • ... но не для GET /

В моем файле app.routing.ts я настроил следующие маршруты:

const appRoutes: Routes = [
    { path: 'home'  , component: HomeComponent },
    { path: 'misc'  , component: MiscComponent },
    { path: 'help'  , component: HelpComponent },
    { path: 'auth'  , component: AuthComponent },

    { path: ''      , redirectTo: '/home', pathMatch: 'full' },
    { path: '**'    , component: NotFoundComponent }
];

Следовательно, когда пользователь обращается к http://localhost/cool, приложение Angular загружает и затем нажимаетисторическое состояние становится http://localhost/cool/home (поэтому адресная строка изменяется, но браузер не выполняет полную перезагрузку страницы нового местоположения).Пока все хорошо.

На моей странице есть кнопка выхода из системы (в HTML, управляемая AppComponent), которая при нажатии делает это:

class AppComponent {

    logOutClicked( event: Event): void {

        this.clientTokenService.clearSavedToken();

        this.router.navigate( ['auth'] );
    }
}

... но когдаэто происходит, когда браузер выполняет полное обновление страницы для http://localhost или http://localhost/auth (я забыл, что заставило его это сделать, я думаю, что это было, когда я сделал router.navigate( ['/auth'] ) - у меня нет доступа к праву приложения Angularтеперь, чтобы проверить).

Я удивлен, что на маршрутизаторе Angular нет явной опции или функции, которая заставляла бы его выполнять «внутреннее перенаправление», не вызывая перезагрузку полной страницы - или есть, и я 'м просто что-то упустил?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Используйте ссылку на маршрутизатор вместо href.Это будет маршрут без перезагрузки

<a routerLinkActive="active" [routerLink]="['/cool']">Cool Page</a>
0 голосов
/ 29 мая 2018

Измените свой тег «a» на div или span.Если у вас есть тег «a» без атрибута href и без атрибута routerLink, это все равно ссылка со значением по умолчанию, которое я считаю "/".

...