问题
Im using this:
import { HttpParams } from '@angular/common/http';
let params = new HttpParams();
params.append('newOrdNum','123');
But this is not working, i dont append param in url. Any suggestion?
回答1:
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
回答2:
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',
});
}
回答3:
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';
回答4:
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.
来源:https://stackoverflow.com/questions/46213737/angular-append-query-parameters-to-url