如何设置从可观察值到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));
}
}
上面的代码导致控制台正确显示我想要分配给变量myFinalValue
的AccountName
字段的值。但是,我似乎无法弄清楚我出错的地方。
当我尝试使用相同的技术来简单地获取值(而不是登录控制台)时,我得到了通用的:订阅者{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));
}
}
事实证明,由于观察到的是异步和苏伦说:“只有当它完成回调将工作,你不知道什么时候”,我需要发起订阅该第一代码在我的组件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帐户名) )服务/法,我很容易能够分配其中载有我想要的值给一个变量参数。
希望帮助!
OP也可以尝试使用username.json()或username.text() – Carsten
该解决方案返回undefined。 – Sol
仅在绑定时使用myFinalValue,无法知道它何时会返回 –