Comment est-il possible de poster des données de formulaire sur une API de repos externe?
Pour le moment j'ai une forme 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>
et puis j'ai la fonction qui gère l'envoi dans mon fichier Component.ts:
onSubmit = function (user) {
console.log(user);
//this.http.post('http://xxx/externalapi/add', user);
}
Mais comment est-il possible d’envoyer les données de formulaire sur mon API externe? Et quelle est la norme d’envoi des données de formulaire avec Angular? S'agit-il simplement d'une requête de publication avec des données de formulaire telles que queryParams ou est-il standard de le convertir en JSON. Je peux modifier l’API pour gérer toutes les données envoyées, ce n’est pas un problème.
Ok, donc il s’avère que j’ai besoin d’ajouter .subscribe () pour pouvoir poster quelque chose pour pouvoir faire quelque chose . De plus, si je mets "utilisateur" directement dans la requête post pour quelque raison, il envoie une requête avec la méthode "OPTIONS" corps. Je dois donc créer moi-même une chaîne queryParams. Si quelqu'un peut expliquer cela ou montrer un meilleur moyen de le faire, je l'apprécierais. Sinon, cela fonctionne actuellement:
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) => {});
}
Edit: une autre solution, probablement meilleure, consiste à utiliser JSON.stringify (utilisateur) au lieu de body. Mais subscribe () est toujours nécessaire.
For Making as generic Post
& Get
Method in angular 2/4 utilisant des données de formulaire
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);
}
Pourquoi ne pas utiliser TypeScript pour vous simplifier la vie?
Le code HTML a une liaison bidirectionnelle ngModel. J'ai changé pour renommer le formulaire personForm. Vous pouvez ajouter une validation, mais en la sautant.
<form #personForm="ngForm"(ngSubmit)="onSubmit(personForm.value)">
<input name="firstName" [(ngModel)]="firstName">
<input name="lastName" [(ngModel)]="lastName">
<button type="submit">Save</button>
</form>
Sur le composant, vous pouvez utiliser une interface Personne que vous pouvez définir dans un dossier de modèles. Le contenu ressemble à ceci.
export interface Person {
id:number;
firstName: string;
lastName: string;
}
Et ensuite, dans la méthode submit, vous pouvez le mapper automatiquement comme ci-dessous.
onSubmit(person: Person){
http.post('your_url', person).subscribe(status=> console.log(JSON.stringify(status)));
}
Vous voyez comme il est facile de taper la sécurité? Vous pouvez également vérifier si l'id est renseigné et effectuer une demande "PUT" ou "DELETE" selon que vous souhaitez mettre à jour la personne ou supprimer.
pour poster des données à l'api de repos dont vous avez besoin spacify données variables comme celle-ci
onSubmit = function (user) {
console.log(user.value);
var data= {
"name": user.value.name,
"first_name": user.value.first_name,
"last_name": user.value.last_name,
"creator_email": user.value.email,
}
return this.http.post("http://www.your/api/here.com", data,
{headers:headers}).subscribe(
(res)=>{
// console.log('success');
console.log(res);
},
err=>{
console.log(" Error..");
}
);