我有一个简单的TopbarComponent
这基本上在我的视图顶部添加了一个引导式导航栏。
由于我的 90% 的模板应该包含这个指令,我想通过我的app.component
看起来像这样:
import ...;
@Component({
selector: 'my-app',
templateUrl: 'app/app.component.html',
directives: [ROUTER_DIRECTIVES, TopbarComponent, ...],
providers: [ROUTER_PROVIDERS, ...]
})
@RouteConfig([
{
path: '/login',
name: 'Login',
component: LoginComponent
},
{
path: '/dashboard',
name: 'Dashboard',
component: DashboardComponent,
useAsDefault: true
}
])
它的模板如下所示:
<my-topbar></my-topbar>
<div class="container-fluid">
<div class="row">
<router-outlet></router-outlet>
</div>
</div>
现在我想用ngIf
(或者除了用CSS隐藏它之外的任何其他方式)隐藏多个路线上的顶栏,例如/login
例如。
我尝试了几种方法使用@CanAcitvate()
或实施OnActivate
in my LoginComponent
(以及从我的尝试AppComponent
)但没有任何效果(甚至无法启动功能)。
我得到的最接近的是使用Router
直接在我的AppComponent
像这样:
export class AppComponent implements OnInit{
showTopbar:boolean;
constructor(private _router:Router) {}
ngOnInit():any {
this.showTopbar = this._router.lastNavigationAttempt != '/login';
}
}
并在我的app.component.html
我将指令更改为<my-topbar *ngIf="showTopbar"></my-topbar>
但这仅适用于我的应用程序的初始加载,因为ngOnInit
不会在每次状态更改时触发。我是否可以使用类似的方法(只是找不到)或者我在这里朝错误的方向前进?
Edit:
目前,PierreDuc 的答案对我不起作用,但我尝试使用类似的方法location.path()
像这样:
constructor(private _location:Location) {}
private get _hideTopbar() : boolean {
switch(this._location.path()){
case '/register':
case '/login':
return true;
default:
return false;
}
};
可惜我不能使用data
财产在@RouteConfig
在这种方法中。感觉会好一些。