2016-07-05 80 views
0

在我的Angular2应用程序中,我有一些存在于多个组件之外的页面。在每个页面刷新导航组件

在我app.component.html我有这样的:

<router-outlet></router-outlet> 

而且在部件像这样的HTML:

<div class="container dashboard page"> 
    <app-nav></app-nav> 
    <div class="main"> 
    <p></p> 
    </div> 
    <app-footer></app-footer> 
</div> 

现在,当我打开一个页面的导航和页脚总是刷新。这似乎是合乎逻辑的,但假设我需要在我的app.component.html中执行此操作是否正确?

<app-nav></app-nav> 
<router-outlet></router-outlet> 
<app-footer></app-footer> 

这是最佳实践,是否有另一种方法来避免导航和页脚刷新?

+0

如果你在路由组件外部有它,它不应该刷新。 –

+0

所以我把导航和页脚放在app.component中? –

+0

如果你的架构允许的话,那么是的。 –

回答

0

这是最佳做法,是否有另一种方法来避免导航和 页脚刷新?

是的。你不希望你的“全局组件”随路由改变而改变,所以不要把它们放在“路由改变时改变的组件”。 Angular 2是关于组件之间的关系,它们的嵌套是构建应用程序时的关键部分:)。

就在几个参数:

  • 如果你把内router-outlet全局的组件,你会重复同样的代码,这是对DRY规则。想象一下对全局组件的任何更改 - 您将不得不更新每一个页面组件。
  • 如果全局组件的状态完全依赖于Angular提供的路由器,那么这是一个糟糕的体系结构。路由器负责路由,如果状态与当前页面一致,则页面组件应负责全局组件的更改。
  • 全局组件和页面组件之间的通信应该使用具有RxJs主题的服务完成。我已经描述过它here。这样,您就可以使用单个对象来控制全局组件的状态,该对象是页面组件和全局组件之间的桥梁。
相关问题