2016-12-31 3 views
0

Код ниже явно не работает. Я пытаюсь передать переменную, полученную из функции rxjs observable, в другую функцию. Однако я понятия не имею, как это сделать, и я не могу найти подходящий пример.Angular2: Как передать переменную от наблюдаемой до другой функции

Так, например, код ниже, getUserName() успешно извлекает имя this.username из JSON. Однако я не знаю, как передать это функции getUserInfo().

Я всегда получаю неопределенное.

import {Component, OnInit, Injectable} from '@angular/core'; 
import {Http, Response} from '@angular/http'; 
import {Observable} from 'rxjs/Rx'; 
import 'rxjs/add/operator/map'; 
import {Post} from './Post'; 

@Injectable() 
export class UserService { 

    username: any; 

    constructor(private http: Http) {} 


getUserName(){ 
this.http.get("http://localhost:1337/user").map(res => res.json()).subscribe(
      data => this.username = data.username, 
      err => console.log(err)) 
} 

getUserInfo(){ 
    console.log(this.username); 
} 






} 


} 

ответ

0

Это может быть не прямой ответ на ваш вопрос, может быть, это помогает не-менее, Я предполагаю, что вы хотите использовать пользовательские-данные где-то в компоненте и, скорее всего, шаблон - в этом случае, как правило, полезно использовать BehaviorSubject для хранения и доступа к неправдоподобные данные, вы можете сделать это следующим образом:

@Injectable() 
export class UserService { 
    userData$ = new BehaviorSubject<IUserData>(); 

    constructor(private http: Http) { 
     this.userData$ 
      .subscribe(data => doSomeStuffWheneverUserDataUpdates(data)); 
    } 

    fetchUserData(){ 
     this.http.get("http://localhost:1337/user") 
      .map(res => res.json()) 
      .subscribe(
       data => this.userData$.next(data), 
       err => console.log(err) 
      ); 
    } 
} 

... и где-то в компоненте вы можете использовать:

class MyComponent { 
    constructor(private userService: UserService) { 
     userService.fetchUserData(); 

     // optionally you could subscribe here to 
     // userService.userData$ to do some action whenever 
     // the userData updates, just don't forget to 
     // unsubscribe when the component is destroyed 
    } 
} 

... и в шаблоне:

<div>UserName: {{(userService.userData$ | async)?.username}}</div> 
Смежные вопросы