2017-07-25 55 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