使用 angular 7 处理 ul 菜单

Handle ul menu with angular 7

我正在处理 angular 7 个项目,并且有从服务器端动态填充的 ul 列表。

我得到了物品没问题我的问题是我需要关闭 ul 物品并在 4 里物品后重新打开它。

如何使用下一个示例在 angular 中做到这一点?

<ul class="col-12 col-md-4 col-sm-6 list-unstyled">

  <li *ngFor="let footerPage of footerExtraPages; let i = index+1"><a routerLink="page/{{footerPage.id}}/{{footerPage.slug}}">{{footerPage.title}}</a></li>

</ul>

我想有几种方法可以解决这个问题

一种方法是编写 getter 以获得元素:

html

  <li *ngFor="let footerPage of getFirstFour()">
    <a routerLink="page/{{footerPage.id}}/{{footerPage.slug}}"> 
      {{footerPage.title}}
    </a>
  </li>

ts

public function getFirstFour() {
  return this.footerExtraPages.map((item, i) => {
    if (i <= 4) { 
      return item;
    }
  })
}

然后创建一个新的 ul 以获取相应的其余部分

为了避免不得不依赖模板中的索引 (let i = index+1),您也可以使用一个函数使索引保持一致:

public function getFirstFour() {
  return this.footerExtraPages.map((item, i) => {
    if (i <= 4) { 
      return { index: index + 1, ...item};
    }
  })
}

public function getRest() {
  return this.footerExtraPages.map((item, i) => {
    if (i > 4) { 
      return { index: index + 1, ...item};
    }
  })
}

请注意,如果项目对象附加了一个 ID,上面的代码可能会导致错误,如果您删除扩展运算符,您将能够保留两者,但也意味着您将不得不改造模板更深入。

在组件中,您必须将原始数组拆分为多个数组 像这个例子

    while (this.footerPages.length > 0){
      this.footerExtraPages.push(this.footerPages.splice(0, 4));
    }
 

然后就可以很方便的显示在html模板中了

<ul *ngFor="let footerPages of footerExtraPages;let i = index" class="col-12 col-md-4 col-sm-6 list-unstyled">
    <li *ngFor="let footerPage of footerPages;let i = index"  >
      <a routerLink="page/{{footerPage.id}}/{{footerPage.slug}}">{{footerPage.title}}</a>  
    </li>
  </ul>