【发布时间】:2022-01-08 23:30:22
【问题描述】:
我有一个场景,我的子组件将 BehaviourSubject 作为输入,并且(子)在内部订阅它。 我需要在父级中的 BehaviourSubject 上进行过滤/映射,以便在调用 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;
}));
}
}
模板
<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> 工作正常,但我觉得这不是一个好的解决方案。
请帮助我以更好的方式实现这一目标,谢谢。
【问题讨论】:
-
所以这个behavioursubject是在parent中创建的并且只存在于那里? (除了孩子)我理解对了吗?
-
它的引用仍然在父子节点中。唯一的事情是,如果不是从父级发送,则子级会默认初始化。
-
我知道您不能更改 ChildComponent,但如果有任何方法可以与管理该组件的团队交谈,我建议更改为:twitter.com/joeflateau/status/1466479422207365137
-
我在评论中看到你使用的是库,孩子使用的是什么库?谁知道呢,也许这也可能是一个 XY 问题。所以请提供minimal reproducible example
-
stackblitz.com/edit/…> 在这里我尝试添加一个示例,也许这会提供更多上下文。