11
votes

I have an issue with using routing navigate method of angular. I have two components : LoginComponent and HomeComponent. When I click on the button in "login.component.html", I want to be redirected to "home.component.html".

  • app.module.ts

    import { BrowserModule } from '@angular/platform-browser';
    import { NgModule } from '@angular/core';
    import { AppComponent } from './app.component';
    import { HomeComponent } from './home/home.component';
    import { LoginComponent } from './login/login.component';
    import { RouterModule, Routes } from '@angular/router';
    
    const routes: Routes = [
      {path: 'home', component: HomeComponent}
    ];
    
    @NgModule({
      declarations: [
        AppComponent,
        HomeComponent,
        LoginComponent
      ],
      imports: [
        BrowserModule, RouterModule.forRoot(routes)
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    
  • login.component.html

 <button class="btn btn-primary" (click)="goHome();" class="clickable">Home</button>
  • home.component.html

<p>
  home works!
</p>

The URL changes but it remain in the same component page.

  • login.component.ts

    import { Component, OnInit } from '@angular/core';
    import { Router } from '@angular/router';
    
    @Component({
      selector: 'app-login',
      templateUrl: './login.component.html',
      styleUrls: ['./login.component.css']
    })
    export class LoginComponent implements OnInit {
    
      constructor(private router:Router) { }
    
      ngOnInit() {
      }
    
       goHome() {
        this.router.navigate(['home']);
      }
    }
    
4
check if the router-outlet tag is commentedArokia Lijas

4 Answers

6
votes

Make these additions:

<button class="btn btn-primary" (click)="goHome();" class="clickable">Home</button>

    goHome() {
    this.router.navigate(['home']);
  }

or via <a>.

<a [routerLink]="['/home']">home</a>

If necessary, remove / if you intend to be appended to the current route instead.

1
votes

If you want to load multiple routes in your template then you can use in your app.component template:

 <router-outlet> <router-outlet>

If you want to load nested routes, then try to use:

constructor(private routes: ActivatedRoute) {}
|
|
|
this.route.navigate(['home'], {relativeTo: this.routes});

and use the routerLink directive in your a tag and then pass the route which you specified in your path

hope it's useful.

1
votes

first of all you need to define routes in app.routing.modules.ts like this:

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

const routes: Routes = [
  { path: 'Home', loadChildren: () => import('./Home/Home.module').then(m => m.HomeModule) },
  {
path: '',
redirectTo: '',
pathMatch: 'full'
}
];

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

you need to do this in your Login ts file:

goHome() {
    this.router.navigate(['/home']);
  }

and

<button (click)="goHome()">Home</button>

in Login Html file

Or just:

<button [routerLink]="'home'">Home</button>

in Login html file.

0
votes

Add the routerLink to the button

<button routerLink="/home">Home</button>