【问题标题】:Angular 2 - Toggle directive component depending on pageAngular 2 - 根据页面切换指令组件
【发布时间】:2016-10-28 14:31:18
【问题描述】:

假设我有主页关于高级搜索页面。在我的AppComponent html 我有这个:

<view-header></view-header>
<view-search></view-search>
<router-outlet></router-outlet>
<view-footer></view-footer>

很简单。首先我加载标题的 html,然后加载默认搜索的 html,然后继续。

正如我之前所说,我有页面搜索。显然,我不想显示我的指令 view-search,因为当您在 高级搜索 页面中时它非常无用。

所以我的问题是,当我路由到我的 高级搜索 页面时,如何告诉 Angular2 禁用视图搜索指令?


编辑 1

换句话说,我想做这样的事情:

<view-header></view-header>

<!-- If (not in route "/search") -->
    <view-search></view-search>
<!-- Endif -->

<router-outlet></router-outlet>
<view-footer></view-footer>

【问题讨论】:

  • 使用route.subscribe 可能检查当前活动路线
  • @AngJobs 谢谢你的回复,没听说过。我去看看。
  • 没有问题,在官方文档angular.io/docs/ts/latest/guide/router.html
  • 我不确定我是否理解 route.param.subscribe 是如何回答我的问题的。
  • 你试过了吗this.router.routerState.root 它应该会告诉你Activatedroute

标签: javascript html angularjs angular angular2-directives


【解决方案1】:

您可以在模板中简单地使用ngIf(或绑定到[hidden]):

<view-header></view-header>
<view-search *ngIf="showViewSearch"></view-search>
<router-outlet></router-outlet>
<view-footer></view-footer>
<router-outlet></router-outlet>

您将在哪里定义showViewSearch

constructor(private activatedRoute: ActivatedRoute) {
  this.showViewSearch = activatedRoute.component !== Search
}

所以viewSearch 组件只有在当前路由不是搜索时才会呈现。

【讨论】:

  • 感谢您的帮助,我尝试按照您所说的进行操作,但在整个项目中没有找到 ActivatedRoute 类。也许它在不同的版本中?我的版本是 - angular-cli: 1.0.0-beta.2-mobile.4
  • 您使用的是什么版本的路由器? ActivatedRoute 由 3.x 版本的@angular/route 导出。
  • "@angular/router": "2.0.0-rc.1"。我应该将它升级到 3.x 吗?
  • 是的,v2 路由器已弃用,v3 将与 Angular 2 的稳定 v1 一起发布。angular.io/docs/ts/latest/guide/router.html
猜你喜欢
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多