【问题标题】:How to use Ng-Bootstrap Nav with Child components as tabs?如何使用带有子组件的 Ng-Bootstrap Nav 作为选项卡?
【发布时间】:2021-04-18 15:54:31
【问题描述】:

我正在使用来自Angular BootstrapNav 组件,它的使用方式如下(来自官方示例):

// Working Official Example:
<ul ngbNav #nav="ngbNav" [(activeId)]="active" class="nav-tabs">

  <li [ngbNavItem]="1">
    <a ngbNavLink>One</a>
    <ng-template ngbNavContent>
      <p>Content for One</p>
    </ng-template>
  </li>

  <li [ngbNavItem]="2">
    <a ngbNavLink>Two</a>
    <ng-template ngbNavContent>
      <p>Content for Two</p>
    </ng-template>
  </li>

  // etc...
</ul>

<div [ngbNavOutlet]="nav" class="mt-2"></div>

但是在同一个文件中包含大量内容会使其冗长且混乱,因此我想将导航选项卡放在一个子组件中。我已经尝试过了,但它不起作用:

// What I want to achieve:
<ul ngbNav #nav="ngbNav" [(activeId)]="active" class="nav-tabs">

  <tab-section-1></tab-section-1>

  <tab-section-2></tab-section-2>

  // etc...
</ul>

<div [ngbNavOutlet]="nav" class="mt-2"></div>

子组件:

// tab-section-1
<li [ngbNavItem]="1">
  <a ngbNavLink>One</a>
  <ng-template ngbNavContent>
    <p>Content for One</p>
  </ng-template>
</li>

但它不起作用:(

标签之间的切换效果非常好,甚至标签标题也会显示出来。但是标签 content 没有被渲染,很可能是因为它是 &lt;ng-template&gt; 并且是由另一个 div 中的 ng-bootstrap 渲染的。

我已经四处寻找,但一无所获!谢谢⭐

【问题讨论】:

    标签: angular ng-bootstrap


    【解决方案1】:

    结构略有不同,但您可以尝试为ng-template 中的内容创建组件。这样您就不会破坏导航功能并且仍然拥有自己的组件:

    <ul ngbNav #nav="ngbNav" [(activeId)]="active" class="nav-tabs">
    
      <li [ngbNavItem]="1">
        <a ngbNavLink>One</a>
        <ng-template ngbNavContent>
          <tab-section-1></tab-section-1>
        </ng-template>
      </li>
    
      <li [ngbNavItem]="2">
        <a ngbNavLink>Two</a>
        <ng-template ngbNavContent>
          <tab-section-2></tab-section-2>
        </ng-template>
      </li>
    </ul>
    

    【讨论】:

    • 谢谢!我已经想到了这一点,但我真的想在子组件中包含该部分 (&lt;a ngbNavLink&gt;) 的 title 以及将所有与子相关的代码保留在其自己的组件中。对此有什么想法吗? :)
    • 我认为没有办法将li 的内容包装在独立组件中。 Nav 具有特定的结构,需要同一级别的指令。
    • 啊,我明白了,所以这只是“糟糕”的设计:(我采用了你的解决方案,增加了一个繁琐的步骤,包括在我的组件中包含 2 个模板——一个用于显示标题,另一个用于显示内容,这样我就可以使用具有属性的相同组件在标题和内容之间切换。这很难看,但它有效:) 感谢您的回复!
    • 我不会称其为糟糕的设计,只是您似乎必须根据Nav 结构调整组件。
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多