javascript - אנגולר הסרת פרמטר שאילתה
איך אני אמחק פרמטר שאילתה מה-URL? לדוגמה מ-www.expample.com/home?id=123&pos=sd&sd=iii ל-www.expample.com/home?id=123&sd=iii
עריכה: זו הגרסה שלי:
this.activatedRoute.queryParams.subscribe(c => {
const params = Object.assign({}, c);
delete params.dapp;
this.router.navigate([], { relativeTo: this.activatedRoute, queryParams: params });
}).unsubscribe();
תשובה #1
אתה יכול להסיר פרמטר שאילתה על ידי שימוש באפשרות merge של queryParamsHandling ולעבור null עבור כל הפרמטרים שברצונך להסיר.
// Remove query params
this.router.navigate([], {
queryParams: {
'yourParamName': null,
'youCanRemoveMultiple': null,
},
queryParamsHandling: 'merge'
})
אפשרות זו פשוטה יותר ודורשת פחות עבודה כדי להבטיח שאינך מסיר פרמטרים אחרים. כמו כן, אינך צריך לדאוג לנקות מנוי ל-observable כאשר הקומפוננטה שלך נהרסת.
תשובה #2
עדכון: התשובה של @epelc למטה היא הדרך המעודכנת והנכונה לעשות זאת: https://stackoverflow.com/a/52193044/5932590.
לצערי, כרגע אין דרך ברורה לעשות זאת: https://github.com/angular/angular/issues/18011. עם זאת, כפי שג'ייסונאדן הגיב בזירת הקישור,
זה יכול להיעשות ידנית על ידי מיזוג הפרמטרים הישנים והחדשים של השאילתה, והסרת המפתח שאינך רוצה.
זוהי אחת הדרכים לעשות זאת:
נניח שיש לך את queryParams מאוחסנים בכמה תכונות.
class MyComponent() {
id: string;
pos: string;
sd: string;
constructor(private route: ActivatedRoute, private router: Router) {}
ngOnInit() {
this.route.url.subscribe(next => {
const paramMap = next.queryParamMap;
this.id = paramMap.get('id');
this.pos = paramMap.get('pos');
this.sd = paramMap.get('sd');
});
}
}
שיטה לניקוי הפרמטר pos תיראה כך:
clearPosParam() {
this.router.navigate(
['.'],
{ relativeTo: this.route, queryParams: { id: this.id, sd: this.sd } }
);
}
זה ינווט בפועל לנתיב הנוכחי וימחק את פרמטר השאילתה pos, תוך שמירה על שאר פרמטרי השאילתה שלך כפי שהם.
