我从我的服务器获取一些数据,并希望在.ts文件中使用它做一些事情。到目前为止,我还不了解关于打字稿/角度的基本事情......希望有人可以帮助我
user: any;
public doStuff(){
alert(this.user.username);
}
用户是具有不同属性的对象,例如在ngOnInit()块上初始化的'username'。 我在ngOnInit方法中设置它。正确注入服务并且代码正常工作
ngOnInit() {
this.authService.getProfile().subscribe(profile =>{
this.user= profile.user;
this.initStuff();
},
err => {
console.log(err);
return false;
});
}
它按预期警告用户名...但是一旦我将doStuff()方法的方法调用移到Codeblock之外,它就不再工作了,在浏览器控制台中它说“无法读取属性”值'未定义' - 为什么它未定义?如果我在component.html中使用{{user.username}},它还会显示正确的用户名
ngOnInit() {
this.authService.getProfile().subscribe(profile =>{
this.user= profile.user;
},
err => {
console.log(err);
return false;
});
this.initStuff(); // why cant i call it here? Its where I also call all of my other doStuff() methods
}
答案 0 :(得分:0)
它不起作用,因为getProfile()是异步操作。如果你想做服务器数据的东西,它必须在subscribe next()方法中完成。当aysnc操作具有新值时,将调用next方法。
如果你在next()方法之外调用initStuff(),那么它将立即被执行,这就是为什么你得到"无法读取peoperty' value'未定义"。
希望这可以帮到你。
答案 1 :(得分:0)
如果我已正确理解你正在尝试调用尚未收到的数据,那么你就是控制台错误的原因。在描述的函数中,您使用Observable(RxJs)并且函数是异步的。如果你想用变量' profile'做一些事情。你应该把操作放在Observable回调中,这意味着在body subscribe的调用方法中。