使用 Flex 动态创建卡片并安排其布局

Posted

技术标签:

【中文标题】使用 Flex 动态创建卡片并安排其布局【英文标题】:Create cards dynamically and arrange their layout using Flex 【发布时间】:2019-09-06 02:45:37 【问题描述】:

我想创建 mat-cards 并在其中包含一些内容。卡片的数量可能因 api 的内容而异(如果 api 给我 5 个参数的数据,则必须创建 5 张卡片)这些卡片必须像 3 或 4 一样连续对齐。尝试谷歌搜索如何做到这一点,但找不到。有人可以帮我吗?

<div fxLayout="row" fxLayoutAlign="center">
    <app-tile fxFlex="25%"></app-tile>
    <app-tile fxFlex="25%"></app-tile>
    <app-tile fxFlex="25%"></app-tile>
    <app-tile fxFlex="25%"></app-tile>
    <app-tile fxFlex="25%"></app-tile>
 </div>

这会连续给出 5 个元素。我希望第 5 个元素从新行开始,因为 fxFlex 百分比总和已达到 100%。


<div fxLayout="row" fxLayoutAlign="center">
    <app-tile fxFlex="25%"></app-tile>
    <app-tile fxFlex="25%"></app-tile>
    <app-tile fxFlex="25%"></app-tile>
    <app-tile fxFlex="25%"></app-tile>
 </div>

 <div fxLayout="row" fxLayoutAlign="center">
    <app-tile fxFlex="25%"></app-tile>
 </div>

当我这样做时效果很好。

但是当卡片数量动态变化时,我如何使用 ngFor 做到这一点?

【问题讨论】:

两件事:1.使用*ngFor动态创建mat-cards。 2. 检查flex-wrap 属性以允许内容溢出到下一行。 【参考方案1】:
<div style="display:flex; flex-wrap:wrap; justify-content:flex-start">
    <div *ngFor="let card of Cards">
        <mat-card style="width:YOUR-DESIRED-WIDTH"></mat-card>
    </div>
</div>

我将您的卡片视为一组卡片。如果我们像这样使用 flex,它将包装内容并根据可用的屏幕空间自动对齐卡片。

【讨论】:

【参考方案2】:

在模板的fxLayout 属性中使用wrap

<div fxLayout="row wrap" fxLayoutAlign="center">
  <div fxFlex="25%"></div>
  <div fxFlex="25%"></div>
  <div fxFlex="25%"></div>
  <div fxFlex="25%"></div>
  <div fxFlex="25%"></div>
</div>

stackblitz example here

【讨论】:

布局项目在我的情况下是动态的,可能 2 或 3 或 4 个项目,应该相应地占用相等的空间。

以上是关于使用 Flex 动态创建卡片并安排其布局的主要内容,如果未能解决你的问题,请参考以下文章

如何使用非 MXML 而是 Actionscript 在 Flex 中创建动态状态并为其添加按钮?

具有动态内容的 Flex 网格

如何使用 vue 创建动态网格?

Flex 自定义ToolTip并动态创建应用

Android:创建自定义视图并将其动态添加到布局中

根据集合的大小动态添加行