use*_*273 7 javascript typescript angular
如何将表单数据发布到外部rest api?
目前我有一个HTML格式:
<form [formGroup] = "form" (ngSubmit) = "onSubmit(form.value)">
<input name="name" formControlName="name">
<input name="first_name" formControlName="first_name">
<input name="last_name" formControlName="last_name">
<button type="submit">Save</button>
</form>
Run Code Online (Sandbox Code Playgroud)
然后我有我在component.ts文件中处理提交的函数:
onSubmit = function (user) {
console.log(user);
//this.http.post('http://xxx/externalapi/add', user);
}
Run Code Online (Sandbox Code Playgroud)
但是如何将表单数据发布到我的外部api呢?使用angular发送表单数据的标准是什么?它只是一个简单的post请求,表单数据为queryParams,或者将其转换为JSON是标准的.我可以修改api来处理发送的数据,这不是问题.
Gir*_*buC 15
使用表格数据在角度2/4中制作通用Post和Get方法
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable';
constructor(private _http: Http) { }
get(url: string): Observable < any > {
return this._http.get(url)
.map((response: Response) => <any>response.json());
}
post(url: string, model: any): Observable <any> {
let formData: FormData = new FormData();
formData.append('id', model.id);
formData.append('applicationName', model.applicationName);
return this._http.post(url, formData)
.map((response: Response) => {
return response;
}).catch(this.handleError);
}
Run Code Online (Sandbox Code Playgroud)
use*_*273 10
好的,所以事实证明我必须添加.subscribe()来发布它做某事.此外,如果我出于某种原因将"用户"直接放入发布请求中,它会发送一个请求,其方法为"OPTIONS"而没有正文.所以我必须自己创建一个queryParams字符串.如果任何人都可以解释这个或显示更好的方法来做到这一点,我会赞美它.否则这当前有效:
onSubmit = function (user) {
console.log(user);
var body = "firstname=" + user.firstname + "&lastname=" + user.lastname + "&name=" + user.name;
this.http.post("http://www.testtttt.com", body).subscribe((data) => {});
}
Run Code Online (Sandbox Code Playgroud)
编辑:另一个甚至更好的解决方案是使用JSON.stringify(用户)而不是body.但是仍然需要subscribe().
如何使用Typescript使您的生活更轻松?
html有ngModel两种方式绑定。我已更改为重命名personForm形式。您可以添加验证,但是我在这里跳过了。
<form #personForm="ngForm"(ngSubmit)="onSubmit(personForm.value)">
<input name="firstName" [(ngModel)]="firstName">
<input name="lastName" [(ngModel)]="lastName">
<button type="submit">Save</button>
</form>
Run Code Online (Sandbox Code Playgroud)
在组件上,可以使用可以在models文件夹中定义的Person界面。内容看起来像这样。
export interface Person {
id:number;
firstName: string;
lastName: string;
}
Run Code Online (Sandbox Code Playgroud)
然后,在Submit方法中,您可以像下面自动映射它。
onSubmit(person: Person){
http.post('your_url', person).subscribe(status=> console.log(JSON.stringify(status)));
}
Run Code Online (Sandbox Code Playgroud)
看看类型安全有多容易?您还可以检查是否填充了ID,并根据要更新此人还是要删除此人来提出“ PUT”或“ DELETE”请求。
| 归档时间: |
|
| 查看次数: |
75342 次 |
| 最近记录: |