2016-09-17 169 views
0

我想将sidenav集成到我的应用程序,但它需要sidenav代码在主app.component页面,而实际上我只需要在一个组件中的sidenav。我有一个名为组合的变量。如果combos.length >=1,我会显示sidenav。从另一个访问组件变量

这就是我放在我app.component.html代码:

<md-sidenav-layout> 
     <md-sidenav #IVCombos mode="side" *ngIf="result?.combos?.length >=1"> 
MY SIDENAV 
     </md-sidenav> 

    <!-- Routed views go here --> 
    <router-outlet></router-outlet> 
    </md-sidenav-layout> 

正如你所看到的,内容是sidenav内包装。一个用户将一些数据放在我的路由器组件上的输入上,即combos变量的变化。

由于此变量是路由器组件的实例,而不是我的app.component.ts中的HTML代码,因此不显示sidenav。

我的问题是:

什么是从我app.component.ts访问我的组件combos变量的最佳方式?

在这种情况下是否需要为一个变量创建服务?

回答

0

我认为最好的选择是使用共享服务。在这种情况下也可以使用商店,但在您的情况下并不需要。

共享服务(共享模块):

您的数据就存储为服务类财产

缺点:

  • 在角2,服务可以是全球性或区域性模块。这是什么意思?如果您将服务添加到全球模块提供程序阵列中并且出错 - 也作为您的功能模块提供程序,angular 2将创建两个服务实例,因此其中之一 - 将具有空数据。类似的问题,你可以找到在那里 - https://angular.io/docs/ts/latest/guide/ngmodule.html#!#q-why-it-is-bad

NGRX商店(例如终极版):

你可以使用NGRX店的概念 - https://github.com/ngrx/store

优点:

  • 你可以订阅您的商店在应用程序的所有部分,在每个组件,这样你就可以正确地对每一个数据的变化做出反应,
  • 数据商店将是不可改变的 - 要更改任何内容,您必须分派一个操作,该操作调用纯粹的Reducer函数,因此无法意外修改任何用户数据。
+0

所谓的“缺点”是A2级分层注射器的基本概念,不要责备用枪射击 - Ngrx商店也可能因为被用作“全球”而受到指责。这是一个宗教偏好的问题,我不认为它们中的任何一个都比另一个更适合航行案例。共享服务也可以是订阅的事件发布者。 – estus

+0

在“缺点”部分,我试图描述一个问题。我不是说“在Angular 2中,服务可能是全球性的或模块化的”是不利的。 –