当前位置: 首页 > 知识库问答 >
问题:

基于数组2中id数量的动态URL参数

谷梁英毅
2023-03-14

我有一个名为selectedItem的数组,它是从多选择下拉按钮填充的。如果所有选项都被选中,选择项目可能看起来像这样:

this.selectedItems: SearchItem[]= [
  {"id":"abee232","itemName":"Attractions"},
  {"id":"b6b1a23","itemName":"Artists"},
  {"id":"08a58c8","itemName":"Performing Arts"},
  {"id":"444d047","itemName":"Sports"}
];

我需要添加id值,不管选择了多少,作为超文本传输协议GET请求中的参数。现在我的逻辑看起来像这样。

  private addRequestOptions(params: SearchItem[]): RequestOptions {
    let options: RequestOptions = new RequestOptions();
      options.params = new URLSearchParams();
    if (params != null) params.forEach((p: SearchItem) => {
      options.params.append("&collectionId", p.id);
    })
    console.log(options)
    return options;
  }

  sortResults(){
        let options: RequestOptions = this.addRequestOptions(this.selectedItems);
        this.pendingCardsService.collectionUuidUrl = 'http://address/cards/topbrands?perPage=25', options;
        this.pendingCardsBrandCollection();
  }

我的SearchItem界面如下所示:

export interface SearchItem {
  id?: string;
  itemName?: string;
}

现在,它创建了一个请求选项对象,其中的值是一个数组,但是我的超文本传输协议请求没有在网络选项卡中的查询字符串参数字段中显示这一点。看来addaskestOptions()工作正常,但没有正确应用于get请求。目标是以这样的URL结束:

'http://address/cards/topbrand?perpage=25&collectionId=idValue&collectionId=idValue&collectionId=idValue'

我被困在如何实现这一点上。任何帮助/提示/建议都将不胜感激。

带最终代码的更新我的问题是在中硬编码http://address/cards/topbrands?perPage=25“?perPage=25被读取为params(正确地说是这样),因此没有添加ID,因为params已经存在。我的最终代码最终看起来是这样的,使其正常工作:

  fetchPendingCardsBrandCollection(ids: SearchItem[], pageSize = '25'):Observable<Card[]> {
    const params = new URLSearchParams();
    params.set('perPage', pageSize);
    ids.forEach(id => params.append('collectionId', id.id));
    return this.http.get(this.collectionUuidUrl, {params: params})
      .map(this.extractData)
  }

我的函数调用这个超文本传输协议请求函数,将搜索项作为参数传递。非常感谢@Praveen M的帮助和@Jota。托莱多的解决方案!

共有2个答案

林铭
2023-03-14

通过为现有的数据数组指定一个类型来更新它,这样在处理数组时就不会有太大的错误空间。

// Add the class to a ts file
export class Args {
 id: string;
 itemName: strngs;
}

dropdownList: Args[] = [];

// Declare the selectedItems is a type of Args class
selectedItems: Args[] = [];


this.dropdownList = [
  {id:"abee232b6f3b06c3da1955fb270ced28", itemName:"Attractions"},
  {id:"b6b1a23b6a0ad3ab467284ca92bc7d59", itemName:"Artists"},
  {id:"08a58c804fa4eb462ad4e690a51864f6", itemName:"Performing Arts"},
  {id:"444d0472d7d94f569da6fd7a5608faba", itemName:"Sports"}
];

// Now they are actual key value pair
this.selectedItems = [
  {id:"abee232",itemName:"Attractions"},
  {id:"b6b1a23",itemName:"Artists"},
  {id:"08a58c8",itemName:"Performing Arts"},
  {id:"444d047",itemName:"Sports"}
];
杜骏祥
2023-03-14
import { Observable } from 'rxjs/Observable';
import { Injectable } from '@angular/core';
import { Http, URLSearchParams } from '@angular/http';

export interface SomeInterface {
   // Define the properties of the JSON object sent as response from the backend
}

@Injectable()
export class SomeService {
   constructor(private _http: Http){}

   queryElements(ids: string[] = [], pageSize = 25): Observable<SomeInterface>{
      const params = new URLSearchParams();
      params.set('perPage', pageSize); // using set: replace the existing value of the query parameter "perPage" if exist.
      ids.forEach(id => params.append('collectionId', id)); // using append: allows multiple values for the query parameter "collectionId" 
      return 
       this._http.get("http://address/cards/topbrand",{params: params})
         .map(r => r.json())
         .catch(//handle error);
   }
}
 类似资料:
  • 我试图击中一个看起来像 。< br > < code > API shop . create([CreateCampaignService,{ auth _ token:user . token })] 我怎样才能使APIshop能够像这样的东西: 并点击 /

  • 问题内容: 我正在寻找一个窍门。我知道如何在JavaScript中调用动态的任意函数,并传递特定的参数,如下所示: 我知道如何使用内部的集合传递可选的,无限制的参数,但是,我不知道如何发送任意数量的参数以动态发送给它;我该如何完成这样的工作,但是要有任意数量的可选参数(不要使用丑陋的– )? 问题答案: 使用函数的apply方法:- 编辑 :在我看来,这将是一个稍微的调整会更有用: 这将在浏览器之

  • 我有一个要求。你能建议一下实现这一目标的可能方法吗。 我想根据每个路由中传递的URL更改应用程序的主题。我正在使用以下技术。-前端:AngularJS-后端:节点。js 例如:localhost/x/关于localhost/y/关于 我通过使用Location传递参数,通过cookies实现了这些。登录时进行搜索。但我在所有路线上都需要那个主题参数。基于这个主题,我们需要改变。有人能提出可能的方法

  • 我正在创建一个动态表单。ie基于下拉框中的用户选择。根据下拉选择,我可以有2到20个字段。因此,每次用户更改下拉列表时,我们都可以有各种类型的不同表单字段。 提交url参数。是否可以仅提交可见且与用户选择相关的表单字段当前url字符串正在提交所有值。 对于场景1 当用户从下拉列表中选择“A”时。我们显示firstname和lastname输入字段以及url?fname=fname 情景2 当用户从

  • 我试着写一个小函数,它接受两个列表,并根据另一个列表的元素对一个进行排序。所以类似于: 将产生一个排序列表。 然而,可能是一个不同的列表,比如整数、浮点数或其他列表。理想情况下,我希望我的程序能够获取我抛出的任何列表,根据

  • 问题内容: 我不清楚在Django 1.5中如何最好地在基于类的视图中访问URL参数。 考虑以下: 视图: URLCONF: 我想在我的视图中访问参数,因此可以执行以下逻辑: 例如,如何最好地访问CBV中被子类化的url参数,理想情况下应将逻辑放置在哪里?在某种方法上? 问题答案: 要在基于类的视图中访问url参数,请使用或,这样你就可以通过