Angular 为什么*ngIf和[hidden]在重新评估家长方面的作用不同>;子属性绑定
我有一个组件,其中在模板中我包含另一个组件,其输入绑定如下:Angular 为什么*ngIf和[hidden]在重新评估家长方面的作用不同>;子属性绑定,angular,Angular,我有一个组件,其中在模板中我包含另一个组件,其输入绑定如下: <div *ngIf="showComponent"> <child-component [myInput]="someProperty" (onUpdate)="onUpdate($event)"> </child-component> </div> 如您所见,子组件位于另一个应用了*ngIf的元素中 当第一次显示子组件时,some
<div *ngIf="showComponent">
<child-component
[myInput]="someProperty"
(onUpdate)="onUpdate($event)">
</child-component>
</div>
如您所见,子组件位于另一个应用了*ngIf
的元素中
当第一次显示子组件时,someProperty
的值在其在子组件模板中使用的位置内得到很好的反映
子模板中会发生一个操作,该操作将更新父模板中someProperty
的值
可以切换子组件的可见性,当其隐藏并再次显示时,它不会反映父组件的上次更新值someProperty
如果我将*ngIf
更改为[hidden]
,它将非常有效。这是我应该在这里使用的正确方法吗?我只是担心引入反模式,所以我想我会和社区核实一下
编辑
我理解ngIf和[hidden]在DOM中发生的事情方面的区别。我只是不明白为什么在使用ngIf时,子组件在显示/隐藏操作之间呈现,而不是从它所在的父组件中提取someProperty的最新值
谢谢[hidden]使用CSS将其隐藏在页面上,但使用*ngIf会将其从DOM中删除,因此当它显示时会重新加载,而不仅仅是使其可见。Hi@mindparse,*ngIf是修改和/或删除DOM节点的结构化指令。因此,当我们使用*ngIf时,如果条件为false,它会从DOM中完全删除节点,如果条件为true,它会再次渲染节点,而[hidden]不会删除节点,只是正确设置该元素的显示。根据上述解释,我们更喜欢*ngIf而不是[hidden]。可能是使用SetTimeout(()=>{})将更新逻辑包装在父组件中。谢谢,我已经了解这些逻辑如何与DOM一起工作,请参阅我的editOk,您是否在ngOnChanges()生命周期方法中捕获“myInput”?请参阅此。ngOnInit将被调用一次(它将被缓存),ngOnChanges将被多次调用谢谢,我已经了解了这些如何与DOM一起工作,请参阅我的edit@mindparse能否提供一个代码示例,说明如何在子组件中加载值?您可能只需要在ngOnInit中添加一些加载数据代码来加载新值?@mindparse我在这里创建了一个简单的示例,它与*ngIf一起工作。您确定要更新传入的值吗?