angular - Skicka objekt med routerLink


Jag ville skicka ett objekt med routerLink. Jag hittade mycket men fick inget tillfredsställande svar. Jag är ny på Angular.

user.component.html

<button type="button" routerLink="/admin">Add Event</button>

user.component.ts

export class UserComponent implements OnInit {

  @Input()
  public user: UserOperator = new UserOperator({});

Jag ville skicka ovanstående användarobjekt med knappens routerLink.

app.module.ts

const appRoutes: Routes = [
  { path: 'admin', component: AdminComponent },
]

Jag arbetar med Angular 7. All hjälp skulle vara mycket uppskattad.

Svar #1

Du kan koda ditt objekt till strängen och skicka det genom frågeparametrarna.

komponent.html

<button type="button" [routerLink]="[getLink()]">Add Event</button>

component.ts

...

getLink(): string {
    return `/admin?state=${btoa(JSON.stringify(this.user))}`;
}

...

another.component.ts

constructor(private route: ActivatedRoute) {}

ngOnInit(): void {
   this.route.queryParams.subscribe(params => { 
       let user = new UserOperator(JSON.parse(atob(params['state']))); 
   });
}

Svar #2

Det finns ett npm-paket för Angular som utökar routern: angular2-navigate-with-data

https://www.npmjs.com/package/angular2-navigate-with-data

Jag använder det med Angular 6 och är ganska säker på att det också fungerar med 7. Exempel på användning:

importera paket i app.module-fil: import "angular2-navigate-with-data";

import {Router} from '@angular/router';

class PageOne {
    constructor (private router: Router){}

    public redirect() {
        this.router.navigateByData({
            url: ["/PageTwo"],
            data: [1,2,3,4,5], //data - <any> type
            //extras: {} - <NavigationExtras> type, optional parameter
        });
    }
}


import {Router} from '@angular/router';
import {OnInit} from "@angular/core";

class PageTwo implements OnInit {
    constructor (private router: Router){}

    public ngOnInit() {
        console.log(this.router.getNavigatedData()); //output [1,2,3,4,5]
    }
}