при обновлении маршрут направляется на маршрут по умолчанию с использованием маршрутизатора angular2

Я использую маршрутизатор angular2 для настройки маршрутизации для моего приложения. Вот мой фрагмент кода.

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { AppComponent } from './app.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { UpdateprofileComponent } from './updateprofile/updateprofile.component';
import { ChangepasswordComponent } from './changepassword/changepassword.component';
import { CookieService } from 'angular2-cookie/services/cookies.service';
import { PathLocationStrategy, LocationStrategy, HashLocationStrategy } from '@angular/common';

const routes = [
  {
    path: 'dashboard',
    component: DashboardComponent
  },
  { path: 'updateprofile', component: UpdateprofileComponent },
  { path: 'changepassword', component: ChangepasswordComponent },
  // Not found
  { path: '**', redirectTo: 'dashboard' }
];

@NgModule({
  declarations: [
    AppComponent,
    DashboardComponent,
    UpdateprofileComponent,
    ChangepasswordComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    NgbModule.forRoot(),
    RouterModule.forRoot(routes, { useHash: true })
  ],
  providers: [CookieService],
  bootstrap: [AppComponent]
})
export class AppModule { }

header.component.html

<header>
   <select [(ngModel)]="userOperationType" (ngModelChange)="fnSetOperationType(userOperationType)" class="col-md-12 select-style">
                        <option value="dashboard">Account Administration</option>
                        <option value="changepassword" selected>Change Password</option>
                        <option value="updateprofile">Your Profile</option>
                    </select>
</header>

header.component.ts

import { Component, OnInit,Input } from '@angular/core';
import { UserDetailsService } from '../services/user-details.service';
import { Router } from '@angular/router';

@Component({
  selector: 'app-header',
  templateUrl: './header.component.html',
  styleUrls: ['./header.component.scss'],
  providers: [UserDetailsService]
})
export class NvidiaHeaderComponent implements OnInit {


  constructor() { }


  fnSetOperationType(routeName) {
    this.route.navigate([routeName]);

  }
}

index.html

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
  <title>Angular2Routing</title>
  <base href="./">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root>loading...
  </app-root>
  <script type = "text/javascript" >
history.pushState(null, null, '/#/dashboard');
window.addEventListener('popstate', function(event) {
history.pushState(null, null, '/#/dashboard');
});
</script>
</body>

</html>

Это моя маршрутизация в app.module.ts. После перехода к маршруту смены пароля мой URL-адрес - http://localhost:4200/#/changepassword. Когда я обновляю свою страницу или открываю этот URL-адрес в новой вкладке, мой URL-адрес перенаправляется на http://localhost:4200/#/dashboard (маршрут по умолчанию).

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

Помогите, пожалуйста. Заранее спасибо.


person Ravi Teja Kumar Isetty    schedule 07.03.2017    source источник
comment
Попробуйте удалить использование по умолчанию из пути к панели управления. Вместо перехода к подстановочному пути маршрутизатор выбирает использование в качестве конфигурации по умолчанию.   -  person Karan Garg    schedule 07.03.2017
comment
Вы используете Apache в качестве веб-сервера?   -  person Peekbyte    schedule 07.03.2017
comment
@HassanFalahi Я не использую Apache iam, просто использую angular-cli. ng serve делает мою работу.   -  person Ravi Teja Kumar Isetty    schedule 07.03.2017


Ответы (2)


Вместо useAsDefault: true попробуйте перенаправить маршрут по умолчанию на вашу панель управления:

{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },
{
    path: 'dashboard',
    component: DashboardComponent,
    //useAsDefault: true //remove this
}
person mickdev    schedule 07.03.2017
comment
Я удалил useAsDefault, но по-прежнему не использовал @mickdev - person Ravi Teja Kumar Isetty; 07.03.2017
comment
вы перенаправляли "вручную" в ChangepasswordComponent? Можете ли вы отредактировать свой вопрос и указать его код? - person mickdev; 07.03.2017
comment
Также попробуйте изменить порядок маршрутизаторов, поместите changepass ... перед панелью управления и посмотрите, решит ли это вашу проблему. - person mickdev; 07.03.2017
comment
конечно, я обновлю свой вопрос и внесу предложенные вами изменения - person Ravi Teja Kumar Isetty; 07.03.2017
comment
@mikedev, я обновил свой вопрос, взгляните на него. После изменения порядка маршрутизации мне тоже не помогло. - person Ravi Teja Kumar Isetty; 07.03.2017
comment
Вместо вас ChangepasswordComponent вы предоставили NvidiaHeaderComponent. Я хочу посмотреть, перенаправляете ли вы как-нибудь в ChangepasswordComponent. Можете ли вы предоставить правильный компонент? - person mickdev; 07.03.2017
comment
Найдите обновленный вопрос с ChangepasswordComponent - person Ravi Teja Kumar Isetty; 07.03.2017
comment
хорошо, значит, ChangepasswordComponent имеет NvidiaHeaderComponent в качестве дочернего элемента и функцию fnSetOperationType() перенаправить на правильный маршрут ... Я не вижу здесь ничего подозрительного. Можете ли вы предоставить Plunker, воспроизводящий вашу проблему? - person mickdev; 07.03.2017

Я сделал небольшую ошибку в index.html. Я удалил следующий сценарий. Я использовал его для очистки истории браузера.

<script type = "text/javascript" >
history.pushState(null, null, '/#/dashboard');
window.addEventListener('popstate', function(event) {
history.pushState(null, null, '/#/dashboard');
});
</script>

Это сработало как шарм !!! Спасибо за помощь.:)

person Ravi Teja Kumar Isetty    schedule 09.03.2017