2017-01-18 24 views
18

Na przykład jestem na trasie /cars?type=coupe i chcę przejść do tego samego punktu końcowego z dodatkowymi parametrami zapytania (ale zachowując istniejący). Próbuję coś jak tenW kancie 2, jak zachować parametry zapytania i dodać dodatkowe parametry zapytania do trasy

<a [routerLink]="['/cars']" [queryParams]="{model: 'renault'}" preserveQueryParams>Click</a> 

Początkowe params zapytań są zakonserwowane (typ = samochody), ale dodał te (model = renault) są ignorowane. Czy to oczekiwane/prawidłowe zachowanie, czy jest to jakiś błąd? Wygląda na to, że preserveQueryParams ma wyższy priorytet niż queryParams? Czy istnieje inne płynne rozwiązanie?

+1

Przy użyciu Anguar 4 widzę preserveQueryParams znajduje nieaktualnych użyciu queryParamsHandling zamiast ??? –

Odpowiedz

6

To po prostu działa w ten sposób, niestety:

const q = preserveQueryParams ? this.currentUrlTree.queryParams : queryParams;

Można spróbować dodać dyrektywę niestandardową tak:

@Directive({selector: 'a[routerLink][merge]'}) 
export class RouterLinkDirective implements OnInit 
{ 

    @Input() 
    queryParams: {[k: string]: any}; 

    @Input() 
    preserveQueryParams: boolean; 


    constructor(private link:RouterLinkWithHref, private route: ActivatedRoute) 
    { 
    } 

    public ngOnInit():void 
    { 
     this.link.queryParams = Object.assign(Object.assign({}, this.route.snapshot.queryParams), this.link.queryParams); 
     console.debug(this.link.queryParams); 
    } 
} 


<a [routerLink]="['/cars']" merge [queryParams]="{model: 'renault'}">Click</a> 
4

kątowej 4 i kątowe 5, preserveQueryParams została zastąpiona queryParamsHandling. Dostępne opcje to 'merge' lub 'preserve'.

Na przykład, kod (stosowany w NavigationExtras)

this.router.navigate(['somewhere'], { queryParamsHandling: "preserve" }); 

W szablonem przykład:

<a [routerLink]="['somewhere']" queryParamsHandling="merge"> 
+0

Świetna odpowiedź! może chcieć użyć scalania w pierwszym przykładzie, ponieważ jest to ustawienie, które chce OP – BradleyDotNET