所以基本的故事......
在这个SPA的顶部是一个顶级酒吧'组件,并且该组件内部是搜索栏组件。
现在 - 有几个登陆页面'我们想要关闭此搜索栏组件。
我了解通过服务使用此功能的过程(因为有问题的目标网页并未直接连接到搜索栏组件。而且本身就是这样 - 我有这个工作...
问题来自这样一个事实:如果你登陆其中一个登陆页面,并且这个搜索栏被关闭......如果你离开整个部分并转到需要该栏的其他区域,你必须将此服务添加到“每条可能的路线”中。 (并且有几十个),以及将来添加此服务并打开' SPA中任何新页面的代码。
我想知道的是什么(首先:如果有一种方法可以在少数路由中添加功能,那么这个提议的想法是最好的方法,或者是否有其他方式更好)我们使用的模块类(SPA中每个模块类别一个'部分'默认情况下会打开搜索栏组件) - 如果需要,各个目标网页可以将其关闭(这样我和#39 ; d只需将服务添加到路由模块和特别需要的登录页面),但如果您通过菜单离开该登录页面并转到SPA的完整其他部分,搜索栏将自动返回on(因为无论路由模块将其重新打开)。
我希望这是有道理的!
答案 0 :(得分:2)
我做过类似的事情,我有一个带菜单的组件。我想显示一些没有该菜单的组件,例如登录组件。
我使用多级路由器插座做到了这一点。
应用组件
我只使用路由器插座定义了根应用程序组件。然后,当我想要一个没有菜单的组件时,我会路由到该组件。
<router-outlet></router-outlet>
外壳组件
然后我定义了一个&#34; shell&#34;具有第二个路由器插座的组件。这是我定义菜单的地方。我希望在菜单中显示任何内容,我将路由到此路由器插座。
<mh-menu></mh-menu>
<div class='container'>
<router-outlet></router-outlet>
</div>
路由模块
然后使用children
属性配置路由,以定义路由到ShellComponent的路由。
这样,没有任何组件需要知道菜单是打开还是关闭。它全部由路由配置决定。
RouterModule.forRoot([
{
path: '',
component: ShellComponent,
children: [
{ path: 'welcome', component: WelcomeComponent },
{ path: 'movies', component: MovieListComponent },
{ path: '', redirectTo: 'welcome', pathMatch: 'full' }
]
},
{ path: 'login', component: LoginComponent }
{ path: '**', component: PageNotFoundComponent }
])