映射behavioursubject,并在映射rxjs后将其分配给同一变量



我有一个场景,我的子组件将BehaviourSubject作为输入,并且(子(在内部订阅它。我需要在父级的BehaviourSubject上过滤/映射,这样当调用somewhere next((时,子订阅就会接收映射/过滤的值。

export class ParentComponent {
public myBSubject: BehaviorSubject<ListFilter[]> = new BehaviorSubject<ListFilter[]>(undefined);
public ngOnInit(): void {
this.myBSubject = this.myBSubject.pipe(
map((filters): ListFilter[] => {
// Do some manipulation with filters
return filters;
}));
}
}

tempalate

<child [myBSubject]="myBSubject"> </child>

ChildComponent(我无法控制它。(

export class ChildComponent {
@Input()
public myBSubject: BehaviorSubject<ListFilter[]> = new BehaviorSubject<ListFilter[]>(undefined);

// somewhere subscription of myBSubject
}

问题是.pipe(map(将BehaviourSubject转换为Observable,这是不可赋值的。并且不分配由于不可变映射而未调用的映射回调。

通过制作.pipe(map..) as BehaviourSubject<ListFilter>运行良好,但我觉得它不是一个好的解决方案。请帮助我以更好的方式实现这一点,谢谢。

请看一下类似问题的答案。

除了上面描述的2个选项(使用输入属性设置器或实现OnChanges(之外,我相信还有第三个选项可能适合您的需求,因为您的BehaviorSubject的数据来自另一个可观察的对象。

在父组件中,更新第一个可观察对象的订阅主体中BehaviorSubject的值。然后在父组件的模板中,通过异步管道传递BehaviorSubject,并将其用作子组件的输入。

父组件:

export class ParentComponent {
public myBSubject: BehaviorSubject<ListFilter[]> = new BehaviorSubject<ListFilter[]>(undefined);
public ngOnInit(): void {
this.firstObservable.pipe(
map(value => // map to ListFilter array here)
).subscribe(result => this.myBSubject.next(result));
}
}

模板:

<child [myBSubject]="myBSubject | async"> </child>

最新更新