Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rxjs:Behavior Subject在不调用next()的情况下发出值_Javascript_Angular_Typescript_Rxjs - Fatal编程技术网

Javascript Rxjs:Behavior Subject在不调用next()的情况下发出值

Javascript Rxjs:Behavior Subject在不调用next()的情况下发出值,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我正在用RxJs创建一个多选过滤器,并使用angular服务在组件之间传递值 @Injectable({ providedIn: 'root' }) export class SomeService{ private readonly defaulFilterSelect: SomeSelect[] = [ { id: 1, label: 'label 1', options: [

我正在用RxJs创建一个多选过滤器,并使用angular服务在组件之间传递值

@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;
    }
}
由于某些原因,这并不像我预期的那样工作,当我在订阅上登录控制台时,我会得到我的可观察值的先验值。 此外,如果我修改对象this.filterSelectDataSource.value,而不调用
next(obj)
,UI将侦听更改并呈现更改,这对我来说非常混乱,因为我希望只调用
this.filterSelectDataSource.next(someNewObject)
将触发用户界面中的更改,这些更改将使用可观察到的内容。
有人能给我指一下正确的方向吗?谢谢

当您在
filterSelectDataSource
上将其设置为初始值时,需要深度克隆
DefaufilterSelect
,否则当您更新它时,您正在更新与
DefaufilterSelect
相同的引用


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

请查看我的答案。如果没有next().1),您不应该修改源代码。仅getValue()(而不是.value)2)下一步()3)您的组件代码正确吗?变化检测?订阅等等,谢谢@an的洞察力谢谢!我不知道
    uncheckAllOptions(){
      this.filterSelectDataSource.next(this.defaulFilterSelect); //here
  }