我简化了我的问题:
<div *ngIf="layout1" class="layout1">
<div class="sidebar-layout1">
some items
</div>
<child-component [something]="sth"></child-component>
</div>
<div *ngIf="!layout1" class="layout2">
<child-component [something]="sth">
<p>some content...</p>
</child-component>
</div>
我有一个父组件,它有一个正常的布局(layout1)和一个全屏布局(layout2)的可能性(在全屏模式下,子组件应该在全屏)。问题是,当我用 *ngIf更改布局时,子组件被破坏,并生成一个新组件。我想有相同的示例,不松散的子组件的重要信息,并避免一些API调用。
有没有什么方法可以使子组件不被破坏,或者有没有比ngIf更好的方法?
我只需要一个子组件的父组件中的不同布局的示例。
4条答案
按热度按时间3pmvbmvn1#
正如你可能已经注意到的,如果你使用
*ngIf
隐藏元素,那么就会创建一个新的组件。这是我们将努力关注的,并尽量避免创建新组件。为此,我们可以使用“切换器布局”并将子组件作为内容传递
我添加了一个模拟http调用来显示加载。
在我们的
app-layout-switcher
组件中,我们可以根据需要在布局之间切换。我们将child-component
传递到模板中,以便能够在布局中重用它现在我们可以在布局中使用模板了
我们现在只使用组件的一个示例。为了确认这一点,我在演示中添加了一个文本字段。您会注意到,在切换布局时,数据是持久化的
See this Demo
xurqigkl2#
使用[hidden]属性代替反向逻辑,它将防止元素销毁。
我隐藏只是隐藏/显示DOM元素与CSS通过改变显示风格
4zcjmb1e3#
您可以通过几个步骤实现这一点:
1.使用以下命令创建服务:
1.在服务中定义两个变量,用于保存每个组件的数据:
1.在组件中使用服务:
1.将每个组件数据存储在相对变量中:
1.使用之前使用的
*ngIf
控制零部件可见性:fafcakar4#
当你想在两个不同的布局中显示相同/不同的细节时: