web-dev-qa-db-fra.com

Angular4 - Données post-formulaire au repos api

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.

5
user1985273

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.

10
user1985273

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); 
}
12
GirishBabuC

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. 

3
Mukus

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..");
 } 
 );
0
Nileshdeora1122