2017-07-25 117 views
0

我是Angular 2的新手,不確定如何訂閱。 我有一個會員服務,看起來像(簡版):Angular訂閱,我如何製作方法訂閱

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

然後我有一個使用會員服務的另一個組成部分,我想有這樣的:

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

這樣我就可以檢查成員是否成功創建。

回答

1

我會做這樣的事情

組件

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

服務

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

我不會打擾整理我的答案,這是幾乎相同的 - 但你應該提到的是'createMember '不會實際發送請求,直到訂閱了某個請求爲止。 (另一種方法是使用[Subject](http://reactivex.io/documentation/subject.html))您也可以找到[語法高亮顯示](https://meta.stackexchange.com/questions/184108/ what-is-syntax-highlighting-and-how-it-work/184109#184109)對打字稿片段有用 – 0mpurdy