Angular 角度行为Subject订阅只触发一次

Angular 角度行为Subject订阅只触发一次,angular,typescript,rxjs,observable,Angular,Typescript,Rxjs,Observable,我有一个带有布尔属性的角度服务,名为must\u checkout。我的服务还包含一个名为可观察的\u必须\u结帐的属性,它是一个查看必须\u结帐的行为主体 然后,在我的组件中,我订阅了可观察的\u必须\u签出 这将起作用,并且组件在第一次“必须”签出更改时收到事件。但是,这只触发一次,对必须签出的后续更改不起作用: 服务: import { Injectable, Input, Output } from '@angular/core'; import { BehaviorSubject }

我有一个带有布尔属性的角度服务,名为must\u checkout。我的服务还包含一个名为可观察的\u必须\u结帐的属性,它是一个查看必须\u结帐的行为主体

然后,在我的组件中,我订阅了可观察的\u必须\u签出

这将起作用,并且组件在第一次“必须”签出更改时收到事件。但是,这只触发一次,对必须签出的后续更改不起作用:

服务:

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

export class OrderingService
{

  must_checkout: boolean;
  observable_must_checkout = new BehaviorSubject<boolean>(this.must_checkout);

  constructor([...])
  {
    this.observable_must_checkout = new BehaviorSubject<boolean>(this.must_checkout);
  }

  ChangeSomething()
  {
    console.log("changing the value here...");
    this.must_checkout = true;
  }


}

我没有看到对next()的调用,而next()就是向BehaviorSubject的当前订户激发新事件的方式。你在找这样的东西

  ChangeSomething()
  {
    console.log("changing the value here...");
    this.observable_must_checkout.next(true); 
  }

此外,您不需要在构造函数中初始化主题,因为您只需在上面几行进行初始化:

  observable_must_checkout = new BehaviorSubject<boolean>(this.must_checkout);

  constructor([...])
  {}
observable\u must\u checkout=新行为主体(this.must\u checkout);
构造函数([…])
{}

你就快到了。创建BehaviorSubject时,它使用值
must\u checkout
作为初始值,然后将其丢弃。这意味着对
must\u checkout
的任何更改都不会对您的可观察数据产生任何影响。这与你正在做的事情相当。将此代码复制并通过此处查看
mustCheckOut
中的更改如何不发出新信号

我希望这对你有帮助。如果你需要更多的澄清,请告诉我。进一步阅读可在此处找到:

我也有同样的问题,但原因不同

这是我的声明

  private clients: BehaviorSubject<ClientSummary[]> = new BehaviorSubject(undefined);
  public clients$: Observable<ClientSummary[]> = this.clients.asObservable();
加载页面时,observable将触发以下日志

undefined
但是,当在
行为主体上调用next时,可观察对象没有再次激发

  this.clients.next([/* some clients*/]);
你能看到问题吗?

这很微妙,我花了一段时间才找到

解决方案

更新初始值

 private clients: BehaviorSubject<ClientSummary[]> = new BehaviorSubject([]);
private客户端:BehaviorSubject=newbehaviorsubject([]);
我不知道为什么,但是有了这个更改,每次调用
行为主题
时,observable not都会更新

至于我为什么一开始就没有定义? 可能是复制粘贴

 this.clientService.clients$.subscribe(clients => {
    // do something with clients  
    console.log(clients);
 });

undefined
  this.clients.next([/* some clients*/]);
 private clients: BehaviorSubject<ClientSummary[]> = new BehaviorSubject([]);