Search code examples
angularangular4-router

Navigate to a custom component based on a button state


I've made a toggle button for Login and Register. I want to navigate to the respective components as per this buttons toggle state.

How do I pass or route my custom component inside the condition?

app.component.ts

import { Component } from '@angular/core';
import { RouterModule, Router, Routes } from '@angular/router';
import { LoginComponent } from './login/login.component';
import { RegisterComponent } from './register/register.component';
import { templateJitUrl } from '@angular/compiler';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'Demo';

  public show: boolean = false;
  public buttonName: any = 'Register';

  toggle() {
    this.show = !this.show;

    if(this.show) {
      this.buttonName = "Login";
      console.log(this.buttonName);
      // code to load login component

    }
    else {
      this.buttonName = "Register";
      console.log(this.buttonName)
      // code to load register component
    }

app.component.html

<html>
  <head>
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  </head>
  <body>
<div style="text-align:center">
  <h1>
    Welcome to {{ title }}!
  </h1>
  <button (click)="toggle()" id="bt" routerLink="/register">{{buttonName}}</button>
     </div>
     <br />

<router-outlet></router-outlet>
</body>
</html>

Solution

  • You can use angular Router to naviagte to routes. As you are navigating based on a condition it's easy when you use Router instead routerLink in the template.

    <html>
      <head>
          <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      </head>
      <body>
    <div style="text-align:center">
      <h1>
        Welcome to {{ title }}!
      </h1>
      <button (click)="toggle()" id="bt">{{buttonName}}</button>
         </div>
         <br />
    
    <router-outlet></router-outlet>
    </body>
    </html>
    

    In component.ts Import the Router and inject it into your component.

    import { Router } from '@angular/router';
    
    
    constructor(private router: Router) {
    
    }
    
    toggle() {
        this.show = !this.show;
    
        if(this.show) {
          this.buttonName = "Login";
          this.router.navigate(['/login']);
    
        }
        else {
          this.buttonName = "Register";
          this.router.navigate(['/register']);
        }
    }