Angular 4 动态填充查询参数

Posted

技术标签:

【中文标题】Angular 4 动态填充查询参数【英文标题】:Angular 4 Populate Query Parameters Dynamically 【发布时间】:2018-02-01 11:47:38 【问题描述】:

目标是生成如下网址:

/powerPlants?onlyActive=true&page=1

我的 Typescript 中有以下功能!

allPowerPlants(config: PowerPlantListConfig): Observable<PowerPlant[]> 
    // Convert any filters over to Angular's URLSearchParams
    const params: URLSearchParams = new URLSearchParams();

    Object.keys(config.filters)
      .forEach((key) => 
        params.set(key, config.filters[key]);
      );

    return this.apiService
      .get('/powerPlants'),
      .map(data => data);
  

关于如何从传入的配置(即 PowerPlantListConfig)生成此动态 url 的任何建议

PowerPlantListConfig如下:

export class PowerPlantListConfig 
  type = 'all';

  filters: 
    page?: number,
    onlyActive?: boolean
   = ;

编辑:作为一个快速而肮脏的尝试,这是我尝试的(通过硬编码值)

import Http, Response from '@angular/http';
makeRequest(): void 

    const params: URLSearchParams = new URLSearchParams();

    params.set('onlyActive', 'false');
    params.set('page', '1');
    this.loading = true;
     this.http.request('http://localhost:9000/powerPlants', params: params)
    // this.http.request('http://jsonplaceholder.typicode.com/posts/1')
    .subscribe((res: Response) => 
      console.log(JSON.stringify(res.json()));
      this.data = JSON.stringify(res.json());
      this.loading = false;
    );
  

但这似乎没有生效,因为我看到没有调用 URL 参数的 URL!

【问题讨论】:

请使用angular 用于版本2+,angularjs 用于版本1.x(我已经重新标记了这个问题)。谢谢:) 感谢您的建议! 你能帮我解决我的问题吗? 不,抱歉。我不熟悉 angular 4 我主要是后端开发人员,对我来说,这就像说我不知道​​ Scala 2.12,因为我只知道 Scala 2.11!没有冒犯的意思,但这就是它使用 Angular 编程的目的。它的变化如此之大,以至于您必须从每个新版本开始学习它! 【参考方案1】:

只是一个新的 HttpClientModule 的小例子

import HttpParams from "@angular/common/http";

const params = new HttpParams()
    .set('orderBy', '"$key"')
    .set('limitToFirst', "1");

this.courses$ = this.http
    .get("/courses.json", params)
    .do(console.log)
    .map(data => _.values(data))

您也可以选择 New HttpClientModule 并使用 HttpParams 进行相同的操作。 same的要点

【讨论】:

【参考方案2】:

来自Maxim Koretskyi的建议和提示

我必须将 URLSearchParams 导入为:

import Http, URLSearchParams, Response from '@angular/http';

但如果我的 Webstorm IDE 为我做这件事,我会很高兴的!

【讨论】:

试试 VS 代码!它将为您添加您缺少的参考资料。 :-) 那来自微软?我对微软的任何东西都过敏! 那么我希望你没有使用 Observables ......因为它们也来自微软。 :-) hanselman.com/blog/ReactiveExtensionsRxIsNowOpenSource.aspx 和 TypeScript 一样! 我主要是后端m子,我做了很多Scala和Haskell。我喜欢用 ScalaJS 做 javascript,是的,我在 Scala 上使用过 Rx,但我使用 Monix 库——它实际上是受 Rx.NET 启发的 @sparkr,它不添加导入引用,因为它认为its NodeJS class。在使用 Http 类时,您必须始终仔细检查导入的内容,因为其中许多类似于 NodeJS 类,您最终可能会出现意外行为

以上是关于Angular 4 动态填充查询参数的主要内容,如果未能解决你的问题,请参考以下文章

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

Angular 4 HttpClient 查询参数

Angular 4 - 路由查询参数导致路径匹配失败

Angular.js 指令动态模板URL

Angular 4 - 如何使垫卡填充整个父组件区域

无法使用来自 http get (Angular 4) 的数据填充 Chartist