Angular 变量已更改为默认值,尽管我已在subscribe函数中为其赋值
我使用的是主题,它从一个组件发出一个值。然后我在另一个组件中订阅它,并将其分配给一个变量。我面临的问题是,当我在subscribe函数内部打印变量时,我能够看到值,而当我尝试在subscribe函数外部打印时,它显示默认值 有人能解释一下这个问题的原因吗 代码 firstComponentAngular 变量已更改为默认值,尽管我已在subscribe函数中为其赋值,angular,rxjs,Angular,Rxjs,我使用的是主题,它从一个组件发出一个值。然后我在另一个组件中订阅它,并将其分配给一个变量。我面临的问题是,当我在subscribe函数内部打印变量时,我能够看到值,而当我尝试在subscribe函数外部打印时,它显示默认值 有人能解释一下这个问题的原因吗 代码 firstComponent this.dataService.activateMenusTab.next(false); 第二组件 this.isMediaTabActive = true; this.dataService.a
this.dataService.activateMenusTab.next(false);
第二组件
this.isMediaTabActive = true;
this.dataService.activateMenusTab.subscribe((res) => {
this.isMediaTabActive = res;
console.log(this.isMediaTabActive);//printing false
});
console.log(this.isMediaTabActive);//printing true
它只不过是同步和异步。这就是为什么您将this.isMediaTabActive的值设置为
subscribe之外的值
在本例中,this.isMediaTabActive=true当调用将异步执行的服务时,this.dataService.activateMenusTab
将被执行。也就是说,查询将在后台处理,而您的程序正在做其他事情,并且一旦查询数据准备好,您将对其执行任何您想要的操作
下面我已经提到了将要执行的行的顺序
有关更多信息:当您发送电子邮件时,您是否可以在单击“发送”按钮后立即看到收件人的回复?否。只有在接收者阅读电子邮件并做出响应后,才能看到响应。彼此彼此。这就是为什么服务返回一个可观察的值:让您订阅,以便在执行console.log()很久之后通知您响应何时最终可用。为了使用更新的值,您必须在subscribe
回调中进行处理。那么我需要做什么,以便在订阅函数之后,变量应该有一个我在subscribeNo中设置的值,你不能。subscribe后面的console.log语句将只打印全局值,正如我在回答中已经说过的那样。处理这个问题的一种方法是创建一个函数,该函数将在一组时间间隔上运行。检查this.isMediaTabActive.Ya的值是否发生了变化。我已经解决了这个问题,方法是删除subject并在服务类中创建一个变量,在一个组件中为它赋值,在另一个组件中使用它并使其同步
1. this.isMediaTabActive = true;
2. this.dataService.activateMenusTab.subscribe((res) => {
4. this.isMediaTabActive = res;
5. console.log(this.isMediaTabActive);//printing false
});
3. console.log(this.isMediaTabActive);//printing true