Стратегия Angular 5 HashLocation без навигации

Я пытался реализовать HashLocationStrategy после развертывания приложения Angular 5 в IIS. В моем приложении Angular есть 3 модуля: RootModule и 2 модуля с отложенной загрузкой (AccountModule и AppModule).

После аутентификации в компоненте AccountModule приложение должно перейдите к основному компоненту в AppModule. Но он не перемещается так, как должен, после нажатия кнопки «Войти». Только когда я обновляюсь вручную, он направляет меня к модулю приложения.

Нужно ли мне добавлять какие-либо дополнительные конфигурации или импорт в дочерний модуль, или достаточно просто настроить корневой модуль? Или что-то не так с моими конфигурациями?

Вот мой код:

Модуль корневой маршрутизации:

const routes: Routes = [
    { path: '', redirectTo: '/app/home', pathMatch: 'full' },
    {
        path: 'account',
        loadChildren: 'account/account.module#AccountModule', //Lazy load account module
        data: { preload: true }
    },
    {
        path: 'app',
        loadChildren: 'app/app.module#AppModule', //Lazy load account module
        data: { preload: true }
    }
];

@NgModule({
    imports: [
        RouterModule.forRoot(routes, {
        onSameUrlNavigation: 'reload', useHash: true, enableTracing: true
    })],
    exports: [RouterModule],
    providers: []
})

Корневой модуль:

@NgModule({
    imports: [
        // ...,
        RootRoutingModule
    ],
    declarations: [
        RootComponent
    ],
    providers: [
        // ...,
        {provide: LocationStrategy, useClass: HashLocationStrategy}
    ],
    bootstrap: [RootComponent]
})

@NgModule({
    imports: [
        RouterModule.forChild([
            {
                path: '',
                component: AccountComponent,
                children: [
                    { path: 'login', component: LoginComponent },
                    { path: 'register', component: RegisterComponent }
                ]
            }
        ])
    ],
    exports: [
        RouterModule
    ]
})

Шаги

Когда я ввожу учетные данные пользователя и нажимаю кнопку «Войти», он не переходит к #/app/home, он просто остается там, где находится сейчас. Но он уже аутентифицирован. Стратегия Angular 5 HashLocation без навигации

Мне нужно вручную ввести корневой URL-адрес в адресной строке. Стратегия Angular 5 HashLocation без навигации

Только после этого я попадаю на #/app/home.

Стратегия Angular 5 HashLocation без навигации

Отслеживание навигации

Это фиксируется в журнале консоли после того, как я нажал кнопку входа в систему.

Router Event: NavigationStart
platform-browser.js:367 NavigationStart(id: 3, url: '/')
platform-browser.js:367 NavigationStart {id: 3, url: "/"}
platform-browser.js:380 Router Event: RoutesRecognized
platform-browser.js:367 RoutesRecognized(id: 3, url: '/', urlAfterRedirects: '/app/home', state: Route(url:'', path:'') { Route(url:'app', path:'app') { Route(url:'', path:'') { Route(url:'home', path:'home') }  }  } )
platform-browser.js:367 RoutesRecognized {id: 3, url: "/", urlAfterRedirects: "/app/home", state: RouterStateSnapshot}
platform-browser.js:380 Router Event: GuardsCheckStart
platform-browser.js:367 GuardsCheckStart(id: 3, url: '/', urlAfterRedirects: '/app/home', state: Route(url:'', path:'') { Route(url:'app', path:'app') { Route(url:'', path:'') { Route(url:'home', path:'home') }  }  } )
platform-browser.js:367 GuardsCheckStart {id: 3, url: "/", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
platform-browser.js:380 Router Event: ChildActivationStart
platform-browser.js:367 ChildActivationStart(path: '')
platform-browser.js:367 ChildActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationStart
platform-browser.js:367 ActivationStart(path: 'app')
platform-browser.js:367 ActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationStart
platform-browser.js:367 ChildActivationStart(path: 'app')
platform-browser.js:367 ChildActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationStart
platform-browser.js:367 ActivationStart(path: '')
platform-browser.js:367 ActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationStart
platform-browser.js:367 ChildActivationStart(path: '')
platform-browser.js:367 ChildActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationStart
platform-browser.js:367 ActivationStart(path: 'home')
platform-browser.js:367 ActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: GuardsCheckEnd
platform-browser.js:367 GuardsCheckEnd(id: 3, url: '/', urlAfterRedirects: '/app/home', state: Route(url:'', path:'') { Route(url:'app', path:'app') { Route(url:'', path:'') { Route(url:'home', path:'home') }  }  } , shouldActivate: false)
platform-browser.js:367 GuardsCheckEnd {id: 3, url: "/", urlAfterRedirects: UrlTree, state: RouterStateSnapshot, shouldActivate: false}
platform-browser.js:380 Router Event: NavigationCancel
platform-browser.js:367 NavigationCancel(id: 3, url: '/')
platform-browser.js:367 NavigationCancel {id: 3, url: "/", reason: ""}
platform-browser.js:380 Router Event: NavigationStart
platform-browser.js:367 NavigationStart(id: 4, url: '/account/login')
platform-browser.js:367 NavigationStart {id: 4, url: "/account/login"}
platform-browser.js:380 Router Event: RoutesRecognized
platform-browser.js:367 RoutesRecognized(id: 4, url: '/account/login', urlAfterRedirects: '/account/login', state: Route(url:'', path:'') { Route(url:'account', path:'account') { Route(url:'', path:'') { Route(url:'login', path:'login') }  }  } )
platform-browser.js:367 RoutesRecognized {id: 4, url: "/account/login", urlAfterRedirects: "/account/login", state: RouterStateSnapshot}
platform-browser.js:380 Router Event: GuardsCheckStart
platform-browser.js:367 GuardsCheckStart(id: 4, url: '/account/login', urlAfterRedirects: '/account/login', state: Route(url:'', path:'') { Route(url:'account', path:'account') { Route(url:'', path:'') { Route(url:'login', path:'login') }  }  } )
platform-browser.js:367 GuardsCheckStart {id: 4, url: "/account/login", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
platform-browser.js:380 Router Event: GuardsCheckEnd
platform-browser.js:367 GuardsCheckEnd(id: 4, url: '/account/login', urlAfterRedirects: '/account/login', state: Route(url:'', path:'') { Route(url:'account', path:'account') { Route(url:'', path:'') { Route(url:'login', path:'login') }  }  } , shouldActivate: true)
platform-browser.js:367 GuardsCheckEnd {id: 4, url: "/account/login", urlAfterRedirects: UrlTree, state: RouterStateSnapshot, shouldActivate: true}
platform-browser.js:380 Router Event: ActivationEnd
platform-browser.js:367 ActivationEnd(path: 'login')
platform-browser.js:367 ActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationEnd
platform-browser.js:367 ChildActivationEnd(path: '')
platform-browser.js:367 ChildActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationEnd
platform-browser.js:367 ActivationEnd(path: '')
platform-browser.js:367 ActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationEnd
platform-browser.js:367 ChildActivationEnd(path: 'account')
platform-browser.js:367 ChildActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationEnd
platform-browser.js:367 ActivationEnd(path: 'account')
platform-browser.js:367 ActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationEnd
platform-browser.js:367 ChildActivationEnd(path: '')
platform-browser.js:367 ChildActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: NavigationEnd
platform-browser.js:367 NavigationEnd(id: 4, url: '/account/login', urlAfterRedirects: '/account/login')
platform-browser.js:367 NavigationEnd {id: 4, url: "/account/login", urlAfterRedirects: "/account/login"}
platform-browser.js:380 Router Event: NavigationStart
platform-browser.js:367 NavigationStart(id: 5, url: '/')
platform-browser.js:367 NavigationStart {id: 5, url: "/"}
platform-browser.js:380 Router Event: RoutesRecognized
platform-browser.js:367 RoutesRecognized(id: 5, url: '/', urlAfterRedirects: '/app/home', state: Route(url:'', path:'') { Route(url:'app', path:'app') { Route(url:'', path:'') { Route(url:'home', path:'home') }  }  } )
platform-browser.js:367 RoutesRecognized {id: 5, url: "/", urlAfterRedirects: "/app/home", state: RouterStateSnapshot}
platform-browser.js:380 Router Event: GuardsCheckStart
platform-browser.js:367 GuardsCheckStart(id: 5, url: '/', urlAfterRedirects: '/app/home', state: Route(url:'', path:'') { Route(url:'app', path:'app') { Route(url:'', path:'') { Route(url:'home', path:'home') }  }  } )
platform-browser.js:367 GuardsCheckStart {id: 5, url: "/", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
platform-browser.js:380 Router Event: ChildActivationStart
platform-browser.js:367 ChildActivationStart(path: '')
platform-browser.js:367 ChildActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationStart
platform-browser.js:367 ActivationStart(path: 'app')
platform-browser.js:367 ActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationStart
platform-browser.js:367 ChildActivationStart(path: 'app')
platform-browser.js:367 ChildActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationStart
platform-browser.js:367 ActivationStart(path: '')
platform-browser.js:367 ActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationStart
platform-browser.js:367 ChildActivationStart(path: '')
platform-browser.js:367 ChildActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationStart
platform-browser.js:367 ActivationStart(path: 'home')
platform-browser.js:367 ActivationStart {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: GuardsCheckEnd
platform-browser.js:367 GuardsCheckEnd(id: 5, url: '/', urlAfterRedirects: '/app/home', state: Route(url:'', path:'') { Route(url:'app', path:'app') { Route(url:'', path:'') { Route(url:'home', path:'home') }  }  } , shouldActivate: false)
platform-browser.js:367 GuardsCheckEnd {id: 5, url: "/", urlAfterRedirects: UrlTree, state: RouterStateSnapshot, shouldActivate: false}
platform-browser.js:380 Router Event: NavigationCancel
platform-browser.js:367 NavigationCancel(id: 5, url: '/')
platform-browser.js:367 NavigationCancel {id: 5, url: "/", reason: ""}
platform-browser.js:380 Router Event: NavigationStart
platform-browser.js:367 NavigationStart(id: 6, url: '/account/login')
platform-browser.js:367 NavigationStart {id: 6, url: "/account/login"}
platform-browser.js:380 Router Event: RoutesRecognized
platform-browser.js:367 RoutesRecognized(id: 6, url: '/account/login', urlAfterRedirects: '/account/login', state: Route(url:'', path:'') { Route(url:'account', path:'account') { Route(url:'', path:'') { Route(url:'login', path:'login') }  }  } )
platform-browser.js:367 RoutesRecognized {id: 6, url: "/account/login", urlAfterRedirects: "/account/login", state: RouterStateSnapshot}
platform-browser.js:380 Router Event: GuardsCheckStart
platform-browser.js:367 GuardsCheckStart(id: 6, url: '/account/login', urlAfterRedirects: '/account/login', state: Route(url:'', path:'') { Route(url:'account', path:'account') { Route(url:'', path:'') { Route(url:'login', path:'login') }  }  } )
platform-browser.js:367 GuardsCheckStart {id: 6, url: "/account/login", urlAfterRedirects: UrlTree, state: RouterStateSnapshot}
platform-browser.js:380 Router Event: GuardsCheckEnd
platform-browser.js:367 GuardsCheckEnd(id: 6, url: '/account/login', urlAfterRedirects: '/account/login', state: Route(url:'', path:'') { Route(url:'account', path:'account') { Route(url:'', path:'') { Route(url:'login', path:'login') }  }  } , shouldActivate: true)
platform-browser.js:367 GuardsCheckEnd {id: 6, url: "/account/login", urlAfterRedirects: UrlTree, state: RouterStateSnapshot, shouldActivate: true}
platform-browser.js:380 Router Event: ActivationEnd
platform-browser.js:367 ActivationEnd(path: 'login')
platform-browser.js:367 ActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationEnd
platform-browser.js:367 ChildActivationEnd(path: '')
platform-browser.js:367 ChildActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationEnd
platform-browser.js:367 ActivationEnd(path: '')
platform-browser.js:367 ActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationEnd
platform-browser.js:367 ChildActivationEnd(path: 'account')
platform-browser.js:367 ChildActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ActivationEnd
platform-browser.js:367 ActivationEnd(path: 'account')
platform-browser.js:367 ActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: ChildActivationEnd
platform-browser.js:367 ChildActivationEnd(path: '')
platform-browser.js:367 ChildActivationEnd {snapshot: ActivatedRouteSnapshot}
platform-browser.js:380 Router Event: NavigationEnd
platform-browser.js:367 NavigationEnd(id: 6, url: '/account/login', urlAfterRedirects: '/account/login')
platform-browser.js:367 NavigationEnd {id: 6, url: "/account/login", urlAfterRedirects: "/account/login"}

Скриншоты? Ошибки? Демо Stackblitz? Не могли бы вы показать нам что-нибудь из этого?

Edric 13.03.2018 04:18

@ Эдрик: Конечно, я над этим работаю

Wei Minn 13.03.2018 04:26

@Edric Готово, добавление скриншотов и подписей!

Wei Minn 13.03.2018 04:30

есть ли у вас проблемы при запуске в IIS Express (при использовании Visual Studio). Я только что пробовал с последней версией. Никаких проблем с навигацией после успешного входа в систему!

Alper Ebicoglu 13.03.2018 09:33

попробуйте с другим браузером (если вы используете IE)

Alper Ebicoglu 13.03.2018 09:45
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
5
400
0

Другие вопросы по теме