【问题标题】:Subcription outside OnInit在 NGOnInit 之外订阅
【发布时间】:2017-08-30 16:37:08
【问题描述】:

我有两个子组件,我想在它们之间传递数据,为此我使用服务。

我在服务中

 headerObject = new Subject<HeaderObject>();

在第一个组件中我有方法

  onClick() {
    this.listImage = this.imageService.getImages();
    let headers = new HeaderObject();
    headers.file = this.listImage[0].data;
    this.documentService.getOcrDocument(headers).subscribe(res => {
    headers = res;
    this.ocrService.headerObject.next(headers);
  })

在第二个组件中

   headerSubcribed: HeaderObject;
   private headerSubscription: Subscription;

   ngOnInit() {
     this.headerSubscription = 
     this.ocrService.headerObject.subscribe((ocrHeader: HeaderObject) => {
     this.headerSubcribed = ocrHeader;
   }

但是 ngOnInit() 在渲染视图之后只有一次我想将此代码移动到 ngOnit 外部并执行它,但我不知道如何?一些提示如何执行该代码?我在发出值的 next() 方法设置断点,但后来的方法订阅没有执行?我会做错什么?

【问题讨论】:

  • 放入构造函数
  • @Thabung 如果下一个问题发出订阅方法执行甚至在开始时执行的构造函数的值。如何执行这段sn-p的代码?

标签: javascript angular typescript


【解决方案1】:

您可以观察/订阅 2 个部分

观察并通知。 在您的服务中,您有一个 Subject 类型变量,您通过调用 next() 将值推送给它。当这个方法被调用时,它会通知所有的观察者意味着谁订阅了它。

倾听观察者并采取行动 当您聆听观察者时,您会在他们更改值时获得更新。订阅是放在 onNginit 还是构造函数中都没有关系,如果代码在那里,它会在代码发生变化时通知你。

如果适合您的情况,您也可以探索BevavourSubject

【讨论】:

  • 我从 get rest 方法推送到 next() 方法值,但订阅没有通知为什么会这样?
猜你喜欢
  • 2022-07-31
  • 2018-06-12
  • 2019-10-25
  • 1970-01-01
  • 2019-01-25
  • 2020-02-12
  • 1970-01-01
  • 2017-09-01
  • 2019-11-14
相关资源
最近更新 更多