如何设置从可观察值到Angular 2中的变量

如何设置从可观察值到Angular 2中的变量

问题描述:

我有一个UsernameService,它返回一个包含json对象的observable。在AnotherService中,我想从UsernameService对象注入一个值。如何设置从可观察值到Angular 2中的变量

到目前为止,我可以从UsernameService订阅observable,并且可以在控制台中显示它。我甚至可以钻取并显示控制台中对象的其中一个值。但是,我不明白如何将该值分配给我可以使用的变量。取而代之的是,当我尝试值分配给一个变量,在控制台中我得到:用户{closed: false, _parent: null, _parents: null...etc

这里是我的例子,我成功地显示在控制台中观察到的值:

import { UsernameService } from './username.service'; 
import { Injectable, OnInit } from '@angular/core'; 
import 'rxjs/Rx'; 

@Injectable() 
export class AnotherService { 

    username: any[] = []; 

    constructor(private getUsernameService: UsernameService) { } 

    someMethod() { 
     let myFinalValue = this.getUsernameService.getUsername() 
     .subscribe(username => console.log(username.data[0].AccountName)); 
    } 
} 

上面的代码导致控制台正确显示我想要分配给变量myFinalValueAccountName字段的值。但是,我似乎无法弄清楚我出错的地方。

当我尝试使用相同的技术来简单地获取值(而不是登录控制台)时,我得到了通用的:订阅者{closed: false, _parent: null, _parents: null ...等等,正如我前面提到的。

下面是导致我的错误代码的例子:

import { UsernameService } from './username.service'; 
import { Injectable, OnInit } from '@angular/core'; 
import 'rxjs/Rx'; 

@Injectable() 
export class AnotherService { 

    username: any[] = []; 

    constructor(private getUsernameService: UsernameService) { } 

    someMethod() { 
     let myFinalValue = this.getUsernameService.getUsername() 
     .subscribe(username => this.username = username.data[0].AccountName); 
     console.log(queryAccountName); 
    } 
} 

最终,我的目标是刚刚从分配username.data [0] .AccountName给变量myFinalValue值。

在此先感谢您的帮助!

因为你的调用是异步的(回调只有在完成时才会起作用,你不知道什么时候),你不能从异步调用中返回一个值,所以你只需要在调用时分配它完成。 你需要做你的逻辑,这与你在subscribe方法中得到的username有关。您需要创建一个字段以保留username的值,以备将来在课程中使用。

@Injectable() 
export class AnotherService { 

    username: any[] = []; 
    myFinalValue: string; 

    constructor(private getUsernameService: UsernameService) { } 

    someMethod() { 
     this.getUsernameService.getUsername() 
     .subscribe(username => this.myFinalValue = username.data[0].AccountName)); 
    } 
} 
+0

OP也可以尝试使用username.json()或username.text() – Carsten

+0

该解决方案返回undefined。 – Sol

+0

仅在绑定时使用myFinalValue,无法知道它何时会返回 –

事实证明,由于观察到的是异步和苏伦说:“只有当它完成回调将工作,你不知道什么时候”,我需要发起订阅该第一代码在我的组件ngOnInIt服务。从那里,我需要将订阅值传递给组件中的实际调用订阅服务的方法作为参数。与getUsernameService.getUsername服务文件

getCharges(accountName) { 
    this.getChargesService.getCharges(accountName) 
    .subscribe((charges) => { 
     this.charges = charges.data; 
     }, (error) => console.log(error) 
    ) 
    } 


ngOnInit() { 
this.getUsernameService.getUsername() 
    .subscribe(username => { 
     this.username = username.data[0].AccountName; 
     this.getCharges(this.username); 
     }) 
    } 

然后(:

这里是一片形成我的组件(你可以看到传递给getCharges)方法(this.username值(getCharges帐户名) )服务/法,我很容易能够分配其中载有我想要的值给一个变量参数。

希望帮助!