typescript 无法在UI上更改Angular deepCloned子组件输入

muk1a3rh  于 2022-11-26  发布在  TypeScript
关注(0)|答案(1)|浏览(126)

我有父组件和子组件。在父组件中有BehaviourSubject<SomeObject[]>()

export interface SomeObject(){
field: number;
...
editable: boolean
}

我不能将整个对象传递给子组件,我必须在此之前进行筛选,因此输入值如下所示:

childInputData = parentBehaviourSubject.value.filter(x=>...);

在子组件UI上,如果字段editable = false,则会显示编辑图标,单击此图标后,它会更改editable = true,并启用某些字段进行编辑我问题是,我希望将克隆数组作为子输入传递当我更改

childInputData = _.cloneDeep(parentBehaviourSubject.value.filter(x=>...));

用户界面编辑图标停止React任何点击。我真的不知道为什么。我错过了什么?

3qpi33ja

3qpi33ja1#

为什么要在一个对象上调用filter(...)呢?这个函数是用于数组的。如果你在behaviorsubject上调用.value,你基本上是取这个对象的当前值,而忽略那些将来会发出的值。
如果您希望每次都将当前值传递给子组件,则应使用pipe您的值并订阅它(使用async管道)。
下列程式码会从parentBehaviourSubject建立每个发出值复本的可观察项目:

childInputData$ = parentBehaviourSubject.pipe(map( val => _.cloneDeep(val) );

在HTML中,您可以使用以下代码将此值传递给您的孩子:

<child-component [childData]="childInputData$ | async">
...

相关问题