当前位置: 首页 > 知识库问答 >
问题:

如何检查Angular中是否填充了可观测值?

葛书
2023-03-14

我希望通过一个HTTP请求在应用程序中集中加载一些数据,并希望将这些数据传递给多个单独的组件。我正在使用Behavior Subject类设置加载到共享服务中的可观察对象中的数据,并在单个组件中订阅它。

共享服务:

  data: Observable<any>;

  load_data(){
  this.http.post('/myAPIMethod', {myInputs}).subscribe(
      res => {
              var dataSource=new BehaviorSubject(res);
              this.data = dataSource.asObservable();
          }, error => {
          console.log(error);
      });
  }

app.component.ts:

constructor(private shared: SharedService) { }
ngOnInit(){
  this.shared.load_data();
  }

myComponent.component.ts

constructor(private shared: SharedService) { }
ngAfterViewInit(){
  this.shared.data.subscribe(
      res => {console.log(res)},
      err => {console.log(err)}
    );
}

由于我的app.component.ts和myComponent.component.ts文件是异步和独立加载,我得到一个错误,当它试图订阅'数据'观察myComponent甚至在应用程序加载数据之前。我得到一个未定义的错误订阅('data'是未定义的,它已经试图订阅)。

在myComponent文件中订阅“数据”可观察值之前,如何检查该值是否已设置?

共有1个答案

郤玉书
2023-03-14

使用主题

data = new Subject();

load_data(){
  this.http.post('/myAPIMethod', {myInputs}).subscribe(
      res => {
              this.data.next(res);
          }, error => {
          console.log(error);
      });
}

这样,您的组件可以在数据返回之前订阅主题,并在收到超文本传输协议调用时发出数据。

另外,如果您不打算在subscribe函数中操作DOM/View元素,那么在ngOnInit中调用它:yourComponet.ts

ngOnInit(){
  this.shared.data.subscribe(
      res => {console.log(res)},
      err => {console.log(err)}
    );
 类似资料:
  • 问题内容: 是否有任何功能或NG- 的东西 ,以检查是否有任何显示的复选框的检查? 我通过 ng-click =“ function()” 获得值,并将值传递给。我可以步行检查一下数组是否里面有值。 如果选中任何复选框,我想激活/禁用“下一步”按钮。 最简单的方法是什么? 问题答案: 您可以执行以下操作: 和一个模板: 工作:http://jsfiddle.net/cherniv/JBwmA/ 更

  • 问题内容: 今天早上有一篇帖子问有多少人禁用JavaScript。然后我开始想知道可以使用什么技术来确定用户是否禁用了它。 有谁知道一些简短/简单的方法来检测是否禁用了JavaScript?我的目的是警告您,如果没有启用JS的浏览器,站点将无法正常运行。 最终,我想将它们重定向到可以在没有JS的情况下运行的内容,但是我需要将此检测作为占位符才能启动。 问题答案: 我假设你正在尝试确定是否提供Jav

  • 我正在尝试检查用户单击按钮后是否加载了iframe。 我有 顺便说一下,我的iframe是动态创建的。它不会与初始页面加载一起加载。

  • 问题内容: 我下面的代码创建一个新数组,并将其发送到chat(jFrame)。 但是我需要修改此代码以使其工作,如果打开了聊天jframe,则不要打开新的jFrame。而是在chat jframe中打开新的选项卡。聊天框的代码是: 问题答案: 我想知道如果该窗口依赖于另一个窗口,那么是否不应该使用JDialogs而不是JFrames。 一种解决方案是使用类字段来保存对窗口(JFrame或JDial

  • 问题内容: 有什么方法可以检查Go程序是否在运行时启用了编译功能(例如,用于日志记录/信息目的)? 我检查了文档以及明显的位置(),但找不到任何东西。 问题答案: 据我所知,没有对此的简单检查,但是启用了 build标签后,您就可以利用它了。 我创建了一个新目录,并在其中放置了两个文件: : : 由于使用了build标签,将仅编译两个文件之一。 这也是围棋标准库是怎么做的(,),但由于这是一个内部

  • 我有一个带有http请求的服务,它返回我的标题的可观察到的内容 servise.ts 在我的组件中,我有一个函数从service get Request设置。看起来是这样的: 问题是,有时我接收到带有空标签的标题,不需要显示它们,所以我需要对其进行过滤,并对此标题发送.delete()请求。我尝试了类似的方法(想法是在之前添加,然后在另一个subscribe内部调用。)差不多吧 但不确定这是不是个