首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我在用一堆*如果,有更好的方法吗?

我在用一堆*如果,有更好的方法吗?
EN

Stack Overflow用户
提问于 2018-03-28 01:03:50
回答 1查看 178关注 0票数 0

我有一个边导航,它不是路由,而是填充内容区域。我在模板上使用了一大堆*ngIf,但我想知道是否有更好的方法?也许类似于我将从模板中显示代码,您将能够更好地理解我所要求的内容。

模板是:

代码语言:javascript
复制
<div class="container-fluid">
  <div class="row">
    <div class="d-none d-md-block col-md-2 sidemenu">
      <app-sidemenu [state]="displayContent" (event)="setDataFromSideMenu($event)"></app-sidemenu>
    </div>
    <div class="col-md-10 main-content">
      <div class="jumbotron">
        <h1>Angular Project 1</h1>
        <div *ngIf="display === 'introduction'">
          <app-introduction></app-introduction>
        </div>
        <div *ngIf="display === 'download'">
          <app-download></app-download>
        </div>
        <div *ngIf="display === 'contents'">
          <app-contents></app-contents>
        </div>
        <div *ngIf="display === 'browser-and-devices'">
          <app-browser-and-devices></app-browser-and-devices>
        </div>
        <div *ngIf="display === 'javascript'">
          <app-javascript></app-javascript>
        </div>
        <div *ngIf="display === 'theming'">
          <app-theming></app-theming>
        </div>
        <div *ngIf="display === 'build-tools'">
          <app-build-tools></app-build-tools>
        </div>
        <div *ngIf="display === 'webpack'">
          <app-webpack></app-webpack>
        </div>
        <div *ngIf="display === 'accessibility'">
          <app-accessibility></app-accessibility>
        </div>
        <div *ngIf="display === 'overview'">
          <app-overview></app-overview>
        </div>
        <div *ngIf="display === 'grid'">
          <app-grid></app-grid>
        </div>
        <div *ngIf="display === 'media-object'">
          <app-media-object></app-media-object>
        </div>
        <div *ngIf="display === 'utilities-for-layout'">
          <app-utilities-for-layout></app-utilities-for-layout>
        </div>
        <div *ngIf="display === 'reboot'">
          <app-reboot></app-reboot>
        </div>
        <div *ngIf="display === 'typography'">
          <app-typography></app-typography>
        </div>
        <div *ngIf="display === 'code'">
          <app-code></app-code>
        </div>
        <div *ngIf="display === 'images'">
          <app-images></app-images>
        </div>
        <div *ngIf="display === 'tables'">
          <app-tables></app-tables>
        </div>
        <div *ngIf="display === 'figures'">
          <app-figures></app-figures>
        </div>
        <div *ngIf="display === 'alerts'">
          <app-alerts></app-alerts>
        </div>
        <div *ngIf="display === 'badge'">
          <app-badge></app-badge>
        </div>
        <div *ngIf="display === 'breadcrumb'">
          <app-breadcrumb></app-breadcrumb>
        </div>
        <div *ngIf="display === 'buttons'">
          <app-buttons></app-buttons>
        </div>
        <div *ngIf="display === 'button-group'">
          <app-button-group></app-button-group>
        </div>
        <div *ngIf="display === 'card'">
          <app-card></app-card>
        </div>
        <div *ngIf="display === 'carousel'">
          <app-carousel></app-carousel>
        </div>
        <div *ngIf="display === 'collapse'">
          <app-collapse></app-collapse>
        </div>
        <div *ngIf="display === 'dropdowns'">
          <app-dropdowns></app-dropdowns>
        </div>
        <div *ngIf="display === 'forms'">
          <app-forms></app-forms>
        </div>
        <div *ngIf="display === 'input-group'">
          <app-input-group></app-input-group>
        </div>
        <div *ngIf="display === 'jumbotron'">
          <app-jumbotron></app-jumbotron>
        </div>
        <div *ngIf="display === 'list-group'">
          <app-list-group></app-list-group>
        </div>
        <div *ngIf="display === 'modal'">
          <app-modal></app-modal>
        </div>
        <div *ngIf="display === 'navs'">
          <app-navs></app-navs>
        </div>
        <div *ngIf="display === 'navbar'">
          <app-navbar></app-navbar>
        </div>
        <div *ngIf="display === 'pagination'">
          <app-pagination></app-pagination>
        </div>
        <div *ngIf="display === 'popovers'">
          <app-popovers></app-popovers>
        </div>
        <div *ngIf="display === 'progress'">
          <app-progress></app-progress>
        </div>
        <div *ngIf="display === 'scrollspy'">
          <app-scrollspy></app-scrollspy>
        </div>
        <div *ngIf="display === 'tooltips'">
          <app-tooltips></app-tooltips>
        </div>
      </div>
    </div>
  </div>
</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-28 01:20:46

很高兴你在考虑这件事。您可以采取以下三种方法:

第一个是ngSwitch。如果ngIf是JS if()语句,则ngSwitchswitch ... case语句。相当不言自明。

下一个是动态组件加载程序。这是一个组件,它可以采用某种@Input,并根据某种标准动态地在其内部呈现一个不同的组件。您将需要一个逻辑组件、该组件中的一个TemplateRef (通常来自一个指令)来将所呈现的组件附加到并注入一些服务。关于如何做到这一点,下面是是一个很好的指南。我强烈建议探索动态组件加载,即使它不是正确的解决方案,因为它提供了许多深入了解角度如何在幕后工作。

第三个取决于你的设置。在我看来,基于条件集中只有一次为真的条件来有条件地显示组件,本质上就是完成了路由器应该做的事情。与其绑定到所有这些声明,为什么不为每条语句制定一条路线呢?这样,您就可以将每个可能的display值作为可重用的路由。路由器是层次结构的,因此您可以在父-子关系中拥有多个<router-outlet>。您也可以在同一个模板中拥有多个命名网点。您甚至可以将上下文传递给每条路由。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49524542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档