gpt4 book ai didi

Angular BehaviorSubject 订阅只触发一次

转载 作者:行者123 更新时间:2023-12-04 02:41:56 26 4
gpt4 key购买 nike

我有一个 Angular 服务,它有一个名为 must_checkout 的 bool 属性。我的服务还包含一个名为 observable_must_checkout 的属性,它是一个调查 must_checkout 的 BehaviorSubject。

然后,在我的组件中,我订阅了 observable_must_checkout

这有效并且组件在第一次 must_checkout 更改时接收事件。然而,这只会触发一次,随后对 must_checkout 的更改将不起作用:

服务:

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;
}


}

父组件:

import { Component, OnInit } from '@angular/core';
import { OrderingService } from 'src/app/services/ordering.service';

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

export class SettleComponent implements OnInit
{
constructor(private OrderingService: OrderingService) { }

ngOnInit()
{
this.basket = new OrderingService();
this.basket.observable_must_checkout.subscribe((newValue: boolean) => { alert("value changed: " + newValue) });

}

ngOnDestroy() {
this.basket.observable_must_checkout.unsubscribe();
}

}

最佳答案

我没有看到对 next() 的调用,这是您向 BehaviorSubject 的当前订阅者触发新事件的方式。您正在寻找这样的东西。

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

https://www.learnrxjs.io/subjects/

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

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

constructor([...])
{}

关于Angular BehaviorSubject 订阅只触发一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58944936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com