【问题标题】:Angular service subscribe callback is not getting called in library component没有在库组件中调用 Angular 服务订阅回调
【发布时间】:2021-10-04 03:25:19
【问题描述】:

我在库中创建了选项卡组件,该组件显示选项卡,我们可以根据应用程序组件中包含的按钮单击更改选项卡内容或标题。 我在库中创建了一个服务来处理这个问题并在 libray 组件中注册订阅回调。 但是,当我单击按钮时,我正在向行为主题发送数据,但订阅回调并未在库组件中触发。

  ngOnInit(): void {
    this.onTabChangeReceived();
  }

    onTabChangeReceived = () => {
       this.caseSelection.onSelectedTab().subscribe(caseSelected => {
       debugger
        console.log('caseSelected =======', caseSelected);
     });
 }

我这样发送数据的应用组件

 onLockedButtonClicked(event: string) {
         console.log('event is', event);
         this.caseSelectionService.sendSelectedTab(event.toLowerCase().replace(' ', ''))
       }

import {Injectable} from '@angular/core';
import {BehaviorSubject, Observable,} from 'rxjs';

@Injectable({providedIn: 'root'})
export class LaCasesSelectionService {
  private subject = new BehaviorSubject<string>('all cases');

  sendSelectedTab(message: string) {
    debugger
    this.subject.next(message);
  }
  onSelectedTab(): Observable<string> {
    return this.subject.asObservable();
  }
}

谁能说明为什么这个回调没有触发

【问题讨论】:

  • 当你创建这样的函数onTabChangeReceived() { instaed of onTabChangeReceived = () =&gt; {时有什么不同吗?

标签: angular rxjs


【解决方案1】:

我用上面的代码创建了一个 stackblitz,它似乎对我有用。 (我正在收到日志消息。)

这里是堆栈闪电战:https://stackblitz.com/edit/angular-communication-deborahk

请检查一下,看看是否有与您所做的不同的事情。

要检查的一件事:您是否多次注册服务?

例如,您在此处正确注册了服务:

@Injectable({providedIn: 'root'})
export class LaCasesSelectionService {

您是否也在模块或组件中使用[providers] 数组注册服务?如果是这样,请将其删除。

编辑: 附注:

  event.toLowerCase().replace(' ', '')
  // Or to replace all occurrences
  // Use replaceAll if available, otherwise
  // event.toLowerCase().replace(new RegExp(' ', 'g'), '')

【讨论】:

  • 非常感谢您制作示例并回答问题。我已经解决了它实际上以不同的方式导入。我只导入了模块名称,而不是导入库组件的全路径。成功了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
相关资源
最近更新 更多