2017-01-18 19 views
18

Ví dụ: Tôi đang trên tuyến /cars?type=coupe và tôi muốn điều hướng đến cùng điểm cuối với thông số truy vấn bổ sung (nhưng vẫn giữ nguyên tham số hiện tại). Tôi đang thử một cái gì đó như thế nàyTrong góc 2 cách duy trì thông số truy vấn và thêm thông số truy vấn bổ sung vào tuyến

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

Thông số truy vấn ban đầu được giữ nguyên (loại = xe) nhưng bị bỏ qua (model = renault). Đây có phải là hành vi mong đợi/đúng hay là một loại lỗi nào đó? Có vẻ như preserveQueryParams có ưu tiên hơn queryParams? Có giải pháp nào khác trơn tru không?

+1

Khi sử dụng Anguar 4, tôi thấy preserveQueryParams bị phản đối, sử dụng queryParamsHandling thay ??? –

Trả lời

6

Nó chỉ hoạt động theo cách này không may:

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

Bạn có thể cố gắng thêm chỉ thị tùy chỉnh như thế này:

@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

Trong góc 4 và góc 5, preserveQueryParams đã phản đối ủng hộ queryParamsHandling. Các tùy chọn là 'merge' hoặc 'preserve'.

In-mã ví dụ (sử dụng trong NavigationExtras):

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

In-mẫu ví dụ:

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

Câu trả lời hay! có thể muốn sử dụng hợp nhất trong ví dụ đầu tiên của bạn vì nó là cài đặt mà OP muốn – BradleyDotNET

Các vấn đề liên quan