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, תוך שמירה על שאר פרמטרי השאילתה שלך כפי שהם.