2017-07-25 5 views
0

Je suis nouveau sur Angular 2 et je ne sais pas comment faire des abonnements. J'ai un service aux membres qui ressemble (version simple requise):Abonnement angulaire, comment puis-je faire un abonnement à une méthode?

import { Injectable, NgZone, Output, EventEmitter } from '@angular/core'; 
import { Network } from '@ionic-native/network'; 
import { HttpProvider } from '../providers/http-provider'; 

@Injectable() 
export class Member { 

    firstName:string = ""; 
    surname:string = ""; 

    constructor(private httpProvider: HttpProvider, private network: Network, zone: NgZone) { 
    } 

    createMember(member){ 
    this.httpProvider.createMember(member).subscribe(
     result => { 
     var data = JSON.parse(result['_body']); 
     this.firstName = member.FirstName; 
     this.surname = member.Surname; 
     return true; 
     }, 
     err =>{ 
     console.error("Error : "+err); 
     return false; 
     } 
    ); 
    } 
} 

alors j'ai une autre composante qui utilise le service aux membres et je veux avoir quelque chose comme:

this.member.createMember(member).subscribe(data).... 

si je peux vérifiez que le membre a été créé avec succès.

Répondre

1

je ferais quelque chose comme ça

Component

this.membersService.createMember(member) 
    .subscribe(res => { 
     console.log('success', res) 
     }, err => { 
      console.log('error', err); 
     }); 

service

import {Injectable} from '@angular/core'; 
import {Http, RequestOptions, Response, Headers} from '@angular/http'; 
import 'rxjs/Rx'; 

    createMember(member) { 
    const body = JSON.stringify(member); 
    const headers = new Headers({ 
     'Content-Type': 'application/json' 
    }); 
    const options = new RequestOptions({headers: headers}); 

    return this.http.post('/api/members', body, options) 
     .map((res: Response) => res.json()) 
     .catch((err: any) => console.log(err)); 
    } 
+1

Je ne vais pas pris la peine de terminer ma réponse, il est pratiquement le même - mais vous devez mentionner que 'createMember 'n'enverra pas la requête avant que quelque chose ne s'y soit abonné. (L'alternative serait d'utiliser un [Sujet] (http://reactivex.io/documentation/subject.html)) Vous pouvez également trouver [coloration syntaxique] (https://meta.stackexchange.com/questions/184108/ what-is-syntax-highlighting-and-comment-does-it-work/184109 # 184109) utile pour les extraits de type – 0mpurdy