Angular2:如何将变量从observable传递给另一个函数

时间:2016-12-31 21:09:22

标签: angular typescript rxjs

下面的代码显然不起作用。我试图将从rxjs observable函数检索到的变量传递给另一个函数。但是,我不知道该怎么做,我找不到合适的例子。

因此,例如下面的代码,Aborted (core dumped)成功地从JSON中检索this.username。但是,我不知道如何将它传递给getUserInfo()函数。

我总是未定义。

getUserName()

2 个答案:

答案 0 :(得分:0)

这可能不是你问题的直接答案,也许它可以帮助你, 我假设您想在组件中的某个地方使用用户数据,而且很可能是模板 - 在这种情况下,使用@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>

...并在模板中:

SELECT CreationDate,Id,AccountId,Reputation 
 FROM  USERS 
 WHERE Reputation>200 AND CreationDate >= '2016-01-01 00:00:00' AND CreationDate <'2017-01-01 00:00:00' 
ORDER BY Reputation

答案 1 :(得分:0)

由于在实现JSON订阅之前调用了getUserInfo()函数,因此您变得不确定。

您可以向getUserInfo(data)添加一个参数,然后在getUserName()中添加以下代码行-> this.getUserInfo(data);

之后,您应该看到显示信息的console.log。