Home > Blockchain >  angular how get param from url
angular how get param from url

Time:08-29

i want to develop a single page with angular with the url http://localhost:4200/popup/{param}

i will expose this page to my client,for example the client has a button on his app (the app of the client is not an angular app), when he clicks on it, it opens the page with the url http://host/popup/44444444 (the 44444444 is a dynamic param it changes when the client clicks on the button)

so the problem is, how can i get the param in my app ?

i changed the base href <base href="/popup" />, so the default url changed to http://localhost:4200/popup/

when i tried to add manually the param in the url i get this error

Cannot match any routes. URL Segment: '4444444444'

export const routes: Routes = [
  {
      path: '',
      redirectTo: 'popup/:requestNumber',
      pathMatch: 'full',
  },
  {
      path: 'popup/:requestNumber',
      component: AppComponent
  },
];

CodePudding user response:

constructor(private activatedRoute: ActivatedRoute)

ngOnInit(): void {
   const requestNumber = this.activatedRoute.snapshot.paramMap.get('requestNumber'))
}

CodePudding user response:

Simply remove popup from the routes. You don't need to specify that since is defined in the base. I guess you don't need the redirect to popup because this is done by default since you change the base.

export const routes: Routes = [
  {
      path: ':requestNumber',
      component: AppComponent
  },
];

Try with this. After that you could retrieve that url param with the ActivatedRoute service.

CodePudding user response:

You can get url params using ActivatedRoute interface

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-lesson-overview',
  templateUrl: './component.component.html',
  styleUrls: ['./component.component.scss'],
})
export class Component implements OnInit {
  paramValue: string
  constructor(
    private activatedRoute: ActivatedRoute
  ) {
   paramValue  = "";
  }

  ngOnInit(): void {
   paramValue = this.activatedRoute.snapshot.paramMap.get('paramName'))
  }
}

In a Single Page App instead of using href you should use routerLink. To be able to use the routerLink in your HTML as a directive you should import RouterModule in the AppModule

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouterModule } from '@angular/router';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    RouterModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Now you can use it like this <base routerlink="/popup" /> There is also the routerLinkActive that applies a css style to the active link <base routerlink="/popup" routerLinkActive="active" /> where active is a css class.

For more info about why you should use routerlink instead of href you can check this thread

  • Related