Rxjs:Behavior主体在不调用next()的情况下发出了值

时间:2020-10-04 23:57:34

标签: javascript angular typescript rxjs

我正在用RxJ创建一个多选择过滤器,并使用角度服务在组件之间传递值。

response.data

问题是,当用户在应用程序中执行某些工作时,@Injectable({ providedIn: 'root' }) export class SomeService{ private readonly defaulFilterSelect: SomeSelect[] = [ { id: 1, label: 'label 1', options: [ { id: 2, isChecked: false}, { id: 3, isChecked: false} ] }, { id: 7, label: 'Label 2', type: { name: 'checkbox' }, options: [ { id: 4, isChecked: false}, { id: 5, isChecked: false} ] } ] private filterSelectDataSource = new BehaviorSubject<SomeSelect[]>(this.defaulFilterSelect); filterSelectData$ = this.filterSelectDataSource.asObservable(); public get getFilterSelectData(){ return this.filterSelectDataSource.value; } } 类的属性isChecked可以变为true,以后用户可以返回初始状态,即所有名为“ isChecked”的属性均为SomeSelect。 因此,我坚决...好吧,如果我需要我的观察者返回初始状态,为什么不只是false我的默认初始值next()

defaulFilterSelect

由于某种原因,它无法按我预期的那样工作,当我在订阅上进行控制台登录时,我得到了可观察值的先前值。 此外,如果我修改对象 uncheckAllOptions(){ this.filterSelectDataSource.next(this.defaulFilterSelect); //here } ,而没有调用this.filterSelectDataSource.value,则UI会监听更改并呈现更改,这确实让我感到困惑,因为我希望仅调用next(obj)会触发更改在使用该可观察值的用户界面中。 任何人都可以在这里指出正确的方向吗?谢谢!

1 个答案:

答案 0 :(得分:2)

defaulFilterSelect上将Data Frame(Pandas).设置为初始值时,您需要深度克隆,否则在更新时,您将更新{{ 1}}。

如何进行深度克隆取决于您,但是我通常使用Lodash cloneDeep