Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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
Angular 为什么*ngIf和[hidden]在重新评估家长方面的作用不同>;子属性绑定_Angular - Fatal编程技术网

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一起工作。您确定要更新传入的值吗?