【问题标题】:To perform POST http request by an dialog component通过对话框组件执行 POST http 请求
【发布时间】:2018-12-10 18:48:27
【问题描述】:

我有一个名为 list 的组件,它将显示来自 api 的一些标题名称,如下所示:

如图所示,我将fab-button 称为Add。单击此工厂按钮。我正在调用一个对话窗口(组件名称是 add-customer)。像这样:

现在从这个对话框窗口我想填写表单的输入字段(即标题和描述),我想发布它服务器,意味着我想在点击时发送http POST 请求 保存按钮。

我可以使用 GET 方法调用 api。但是对于 POST 方法,我无法做到。

DEMO

add-customer.ts 中,我将表单中的值传递给一个名为postCustomer

的函数

我可以在控制台中看到:

我只想知道如何将这个postCustomer 函数分配给service.ts 文件中的POST 方法。

我正在尝试这样:

   public postCustomer(): Promise<IContact[]> {
    const apiUrl: string = 'api.........';

    return this.http.post<IContact[]>(apiUrl).toPromise();
  }

【问题讨论】:

  • POST 的代码在哪里?
  • 请注意,您不必为所有方法和变量指定 public 关键字。
  • 你应该可以调用HttpClient#post来创建一个POST方法。
  • 让我更新stackblitz
  • 1.最好使用 observable 而不是 promise。在将表单标记为脏后,您必须将获得的数据传递给putContactList

标签: angular angular6 angular-services


【解决方案1】:

对于 POST 方法:

对于 POST 方法,您需要发送一个正文,请将您的服务更改为:

  public postCustomer(data): Promise<IContact[]> {
    const apiUrl: string = 'https://jsonplaceholder.typicode.com/posts';

    return this.http.post<IContact[]>(apiUrl, data).toPromise();
  }

然后在您的AddCustomerComponent 中将您的方法onAddCustomer() 重构为:

 public onAddCustomer(): void {
    this.markAsDirty(this.addCusForm);
    this.postCustomer=this.addCusForm.value;
    console.log(this.postCustomer);
    this.service.postCustomer(this.postCustomer).then(
      (response)=> {
          console.log('POST called', response);

      }
    )
  }

不要忘记在同一个组件中导入您的Service

import {Service} from '../service';

并将其注入constructor:

constructor(private fb: FormBuilder, private service: Service) { }

注意:我不明白您为什么使用 Promises 而不是 Observables,您必须更改它们以获得更多一致性和强大的运算符。

【讨论】:

  • 也感谢您的回答指导..:)
  • 我在service.ts 文件中收到此警告:[ts] 预期有 2-3 个参数,但得到了 1 个。
  • 实际上警告只显示在现有的stackblitz DEMO上,请看一次..:)
  • service.ts 文件中的意思。
  • @PrashanthGH 这在我的回答中已经提到了......(你有一个身体要发送......)
猜你喜欢
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
相关资源
最近更新 更多