Angular: append query parameters to URL

前端 未结 6 1034
萌比男神i
萌比男神i 2020-12-28 14:43

Im using this:

    import { HttpParams } from \'@angular/common/http\';
    let params = new HttpParams();
    params.a         


        
相关标签:
6条回答
  • 2020-12-28 15:03

    I had to adjust Jota.Toledos answer a bit so that it works for me, I had to take out the second and the last property of the extras - object:

       navigateToFoo(){
         this._router.navigate([], {
          queryParams: {
            newOrdNum: '123'
          },
          queryParamsHandling: 'merge',
        });
       }
    
    0 讨论(0)
  • 2020-12-28 15:06

    You should use Router module. check this doc: https://angular.io/guide/router

    You need import these modules: import { Router, ActivatedRoute, ParamMap } from '@angular/router';

    0 讨论(0)
  • 2020-12-28 15:07

    Make sure while passing query params value should not be undefined.

          this.router.navigate([yourRoute,
             queryParams : 
                  {
                    key : (yourValue ? yourValue : '')
                  },
             queryParamsHandling: 'merge'
                ]);
          
    
    0 讨论(0)
  • 2020-12-28 15:08

    You'll want to take the current state of the query parameters from the Angular Router, modify those props (add / delete parameters), then reassign it using the Router:

    // Make sure to import and define the Angular Router and current Route in your constructor
    constructor(
      private router: Router,
      private route: ActivatedRoute
    ) {}
    
    ...
    ...
    ...
    
    // Take current queryParameters from the activated route snapshot
    const urlParameters = Object.assign({}, this.route.snapshot.queryParams); 
    
    // Need to delete a parameter ?
    delete urlParameters.parameterName;
    
    // Need to add or updated a parameter ?
    urlParameters.parameterName = newValue;
    
    // Update the URL with the Angular Router with your new parameters
    this.router.navigate([], { relativeTo: this.route, queryParams: urlParameters });
    
    
    

    You could even go further and build a utility function to do this:

    handleUrlParameters(paramsToAdd: {param: string}[], paramsToDelete?: string[]) {
      const urlParameters = Object.assign({}, this.route.snapshot.queryParams); 
    
      paramsToDelete.forEach(param => delete urlParameters[param]);
    
      Object.keys(paramsToAdd).forEach(param => urlParameters[param] = paramsToAdd[param]);
    
      this.router.navigate([], { relativeTo: this.route, queryParams: urlParameters });
    }
    

    And then you simply call handleUrlParameters with an object mapping a parameter to new values, or an array of parameter names to delete.

    0 讨论(0)
  • 2020-12-28 15:14

    This could be archived by using the Router class:

    Using a component:

    import { Router, ActivatedRoute } from '@angular/router';
    
    @Component({})
    export class FooComponent {
       constructor(
         private _route: ActivatedRoute,
         private _router: Router
       ){}
    
       navigateToFoo(){
         // changes the route without moving from the current view or
         // triggering a navigation event,
         this._router.navigate([], {
          relativeTo: this._route,
          queryParams: {
            newOrdNum: '123'
          },
          queryParamsHandling: 'merge',
          // preserve the existing query params in the route
          skipLocationChange: true
          // do not trigger navigation
        });
       }
    }
    

    For more info check this book and the angular Router API

    0 讨论(0)
  • 2020-12-28 15:19

    You should write

    let params = new HttpParams();
    params = params.append('newOrdNum','123');
    
    0 讨论(0)
提交回复
热议问题