有时仅触发角度行为主题

egh23692

我有一个名为数据库和服务(DatabaseService的组件

然后,我有一个BehaviourSubject具有当前数据库状态的应用程序,我想在应用程序组件上获取该状态。

因此,app.component.ts我订阅了BehaviourSubject

我从BehaviourSubject获取了初始值,并且.next()在数据库服务构造函数上调用了之后获得了值,但是如果我.next()在数据库组件上进行调用,则不会在app组件上获得该值。

我已经尝试将调用.next()放在数据库服务内部的方法上,但是没有用。

Database.component.ts

@Component({
  selector: 'app-database',
  templateUrl: './database.component.html',
  styleUrls: ['./database.component.scss'],
  providers: [DatabaseService]
})


export class DatabaseComponent implements OnInit, OnDestroy {

  ...

  constructor(
      private databaseService: DatabaseService,
  ) {
  }

  ngOnInit(): void {
    ...
  }

  updateDatabaseStatus(): void {
    this.databaseService.databaseStatus.next(this.StatusId.value);
  }

  ngOnDestroy(): void {
    ...
  }
}

database.service.ts

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

    public databaseStatus = new BehaviorSubject<DatabaseStatus>(DatabaseStatus.Open);

    constructor(private api: ApiService) {
      this.getSettingsDatabaseStatus().subscribe(data => {
        this.databaseStatus.next(data[0].statusId);
      });
    }

    public getSettingsDatabaseStatus(): Observable<Status> {
      ...
    }

    public updateCurrentDatabaseStatus(status: DatabaseStatus): void {
      this.databaseStatus.next(status);
    }
}

app.component.ts

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})

export class AppComponent implements OnInit, OnDestroy {


  public databaseStatus = 'Open';

  constructor(public router: Router,
              private _api: ApiService,
              private databaseService: DatabaseService) {
  }

  ngOnInit(): void {

    this.databaseService.databaseStatus.subscribe(status => {
      this.databaseStatus = DatabaseStatus[status];
    });
  }

  ngOnDestroy(): void {
    ...
  }
}
纳姆

问题是您创建了多个DatabaseService实例

在您的数据库服务中,代码providedIn: 'root'意味着将在应用程序的根目录下创建该服务的唯一实例。也就是说,您所有的组件都可以访问该实例。

但是,在database.component中添加了代码providers: [DatabaseService],然后创建了该服务的新的唯一本地实例,只有该组件才能使用该实例。

我建议您从database.component中删除该代码,仅在根级别提供服务。

同样,您绝对只想.next()数据库服务中调用该函数

例如,您的database.component代码如下所示:

@Component({
  selector: 'app-database',
  templateUrl: './database.component.html',
  styleUrls: ['./database.component.scss']
})


export class DatabaseComponent implements OnInit, OnDestroy {

  ...

  constructor(private databaseService: DatabaseService) {
  }

  ngOnInit(): void {
    ...
  }

  updateDatabaseStatus(): void {
      this.databaseService.updateCurrentDatabaseStatus(this.StatusId.value);
  }

  ngOnDestroy(): void {
    ...
  }
}

您应该能够保留app.componentDatabaseService代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

animationstart有时仅触发?

来自分类Dev

如何订阅带有可观察对象的行为主题

来自分类Dev

Angular 2 - 具有行为主题的多个参数?

来自分类Dev

角度:使用forkJoin时主题行为不同

来自分类Dev

有时从未触发DiscoverServices

来自分类Dev

[(NgModel)]是否更新行为主题?

来自分类Dev

循环的ajax有时仅提交

来自分类Dev

有时会触发JS退格键按下事件,有时不会触发

来自分类Dev

触发点击有时不起作用

来自分类Dev

移动Safari有时不触发点击事件

来自分类Dev

触发并忘记异步Task方法,有时不调用

来自分类Dev

触发点击有时不起作用

来自分类Dev

有时只会触发图片加载错误

来自分类Dev

Javascript角度计算有时只是错误的

来自分类Dev

Angular Rxjs如何使用行为主题进行分页

来自分类Dev

将数组作为 Observable 返回给行为主题

来自分类Dev

Log4j-有时仅需要换行

来自分类Dev

重击-有时仅创建空输出

来自分类Dev

为什么recyclerView的findviewbyposition()有时仅返回null

来自分类Dev

Android-仅*有时* OnItemClickListener不起作用

来自分类Dev

有时仅使用LD_PRELOAD覆盖execve()

来自分类Dev

arduino有时仅执行串行命令

来自分类Dev

有时仅显示CUSTOM_ELEMENTS_SCHEMA错误

来自分类Dev

Android-仅*有时* OnItemClickListener不起作用

来自分类Dev

为什么recyclerView的findviewbyposition()有时仅返回null

来自分类Dev

CKAN dataexplorer预览有时仅适用

来自分类Dev

GCM 3.0主题错误:成功订阅,但有时没有通知

来自分类Dev

有没有一种方法可以在ggplot2中的特定角度下将panel.grid.major设置为主题?

来自分类Dev

有时,ConflatedBroadcastChannel会在没有任何操作的情况下触发最近的值

Related 相关文章

热门标签

归档