带有角度路由器出口的 flex 布局(flexbox)

Posted

技术标签:

【中文标题】带有角度路由器出口的 flex 布局(flexbox)【英文标题】:flex layout (flexbox) with angular router outlet 【发布时间】:2018-06-07 18:12:15 【问题描述】:

我正在尝试将 2 个元素彼此相邻放置,其中一个元素占据屏幕的 25%,另一个是一个角路由器出口,它占据了容器的其余部分。使用以下内容最终会在屏幕两侧使用两个元素,中间有空格。 ** 部分是有问题的部分

  <div class="container"
         fxLayout>
    <admin-route-menu fxFlex="25%" fxShow.lt-sm="false"></admin-route-menu>
    <router-outlet fxFlex></router-outlet>
  </div>

看起来像

左侧的 admin-route-menu 标签只是基本的 html 和 css,其中 html 中有一个 mat-list。路由器插座可以根据角度规格采用任何元素。如果这也有帮助,我可以包含 admin-route-menu。

我也尝试过使用常规的弹性盒子,但结果是一样的。

.wrapper 
  display: flex;
  flex-direction: row;
  align-items: stretch;
  width: 100%;
  height: 5em;
  background: #ccc;

.wrapper > .wrapper-left

  background: #fcc;

.wrapper > .wrapper-right

  background: #ccf;
  flex: 1;

感谢任何帮助,谢谢

【问题讨论】:

使用常规 Flexbox,这些规则有效:jsfiddle.net/6d8r4ffk ... justify-content 设置为 space-between,或者您的表单在 right 包装器中右对齐 如果您添加工作代码 sn-p,我们将能够提供正确的答案。 @LGSon 根据要求添加了更多代码。你是对的,它通常可以工作,这就是为什么我认为这可能是弹性盒和角度路由器的角度问题。 由于我们仍然没有 工作 代码 sn-p 可以重现您描述的问题,因此无需多说。 【参考方案1】:

对于任何有类似问题的人,问题已经解决了

<div class="container"
         fxLayout>
    <div fxFlex="25%" fxShow.lt-sm="false">
      <admin-route-menu></admin-route-menu>
    </div>
    <div fxFlex>
      <router-outlet></router-outlet>
    </div>
  </div>

基本上总是将 div 与 angular flex 布局模块一起使用,因为一些自定义元素不能很好地使用它,比如路由器插座

【讨论】:

【参考方案2】:

@dinamix 提供的解决方案效果很好。所以,我会解释这个问题背后的原因。

您遇到的问题是预期的,原因很明显,您将 flex 属性赋予 router-outlet。因此路由器插座占用了所有剩余空间(此处为宽度)。

如果人们理解 Angular 不会用与路由对应的组件替换 router-outlet,那么这种混淆应该会消失。相反,它将组件附加到路由器插座旁边。

因此,通过将路由器插座包装在一个容器中并在其上设置 flex 将保持路由器插座不变,并且 flex 效果将对其兄弟(在您的示例中为供应商形式)附加角度可见。

【讨论】:

感谢您的详细解释!

以上是关于带有角度路由器出口的 flex 布局(flexbox)的主要内容,如果未能解决你的问题,请参考以下文章

Angular Flex 布局总是显示滚动条

如何在角度 2 的网格中使用 flex 布局和 md-card?

Angular 9 嵌套延迟加载模块,带有嵌套路由器出口

带有截断文本的 flex 布局的 Tailwind css

带有水平滚动条的 pre/code 元素破坏了 Firefox 上的 flex 布局

无法匹配任何路由。 URL 段:同时使用多个路由器出口