Не удается открыть страницу входа с помощью routerLink

#angular #angular-router #angular-routerlink

#angular #angular-маршрутизатор #angular-routerlink

Вопрос:

Я пытаюсь перейти на страницу / login всякий раз, когда пользователь нажимает на опцию Login / Signup, присутствующую в моем компоненте заголовка. Но всякий раз, когда я нажимаю на Login / signUp, она остается на той же странице.

Мой файл app-routing.module.ts выглядит следующим образом

 import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {LoginComponent} from './modules/login/login.component';
import {BlogComponent} from './modules/blog/blog.component';

const routes: Routes = [

  {
    path: '',
    redirectTo: 'blog',
    pathMatch: 'full'
  },
  {
    path: 'login',
    component: LoginComponent
  },
  {
    path: 'blog',
    component: BlogComponent,
    children: [
      {
        path: '**',
        component: BlogComponent
      }
    ]
  },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {
}
import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {LoginComponent} from './modules/login/login.component';
import {BlogComponent} from './modules/blog/blog.component';

const routes: Routes = [

  {
    path: '',
    redirectTo: 'blog',
    pathMatch: 'full'
  },
  {
    path: 'login',
    component: LoginComponent
  },
  {
    path: 'blog',
    component: BlogComponent,
    children: [
      {
        path: '**',
        component: BlogComponent
      }
    ]
  },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {
}
  

и HTML-тег, из которого я пытаюсь вызвать это, помещен в мой header.component.html

 <a data-toggle="tooltip" title="Sign In/Sign Up" routerLink="/login" routerLinkActive="active" class="login">Login/SignUp</a>
  

Также я добавил router-outlet в свой app.component.html

 <app-header></app-header>
<router-outlet></router-outlet>
<app-footer></app-footer>
  

Хотя, когда я вручную перехожу на страницу входа, т. Е. вводя localhost: 4200 / login в браузере, он успешно открывает страницу входа.

Мой полный код можно найти здесь —

https://github.com/vibhorgoyal18/atest-blog/tree/master/src/app

Комментарии:

1. Но просто не работает ‘/ login’ или все они не работают?

2. /blog — это маршрут по умолчанию. Итак, это работает нормально. Также я могу успешно загружать компоненты в компоненты моего блога. Но / login работает не так, как ожидалось

Ответ №1:

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

Проблема заключалась в том, что у вас в вашем проекте есть ContentComponent и внутри него вы вызываете некоторые службы, но вы хотите unsubscribe использовать эти службы в цикле событий ngOnDestroy.

 export class ContentComponent implements OnInit, OnDestroy {
  pageContent: string;
  blogContentSubscription: Subscription;
  contentSubscription: Subscription;

  constructor(private blogService: BlogService, private http: HttpClient) {
  }

  ngOnInit() {
    this.blogContentSubscription = this.blogService.selectedNode.subscribe((node) => {
      this.blogService.getPageContent(node).subscribe(data => {
      }, (res: HttpErrorResponse) => {
        this.pageContent = res.error.text;
      });
    });
  }

  ngOnDestroy(): void {
    this.blogContentSubscription.unsubscribe();
    this.contentSubscription.unsubscribe();
  }
}
  

Если вы посмотрите код, вы вызываете, blogContentSubscription а затем отписываетесь, но вы также отписываетесь contentSubscription , но вы не вызывали раньше. Итак, результат таков…

Uncaught (in promise): TypeError: Cannot read property 'unsubscribe' of undefined

и это то, что останавливает маршрут входа. Вам просто нужно удалить строку, в которой вы отказываетесь от подписки contenSubscription , и это сработает.

В следующий раз попробуйте просмотреть ее получше. Это было бы невозможно, если бы вы не опубликовали все детали

Ответ №2:

Вам необходимо импортировать RoutingModule в модуль, который объявляет HeaderComponent

Комментарии:

1. Я попытался импортировать RouterModule в мои app.component.ts и header.component.ts оба. Но ничего не помогло.