You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 5中如何根据数组索引为首个博客帖子切换CSS类?

解决Angular 5中首个博客帖子使用不同列类的问题

嘿,这个需求其实用Angular *ngFor 自带的索引就能轻松搞定!你之前尝试访问数组索引没成功,大概率是没在循环里正确利用索引值来动态切换类。下面给你两种可行的方案:

方案一:使用 [ngClass] 动态绑定类(推荐)

在 *ngFor 中添加索引变量,然后根据索引判断当前项是否为第一个,动态设置对应的列类:

修改后的HTML代码如下:

<div *ngFor="let blog of blogs; let i = index" 
     [ngClass]="{'blog-posts': true, 'col-md-12': i === 0, 'col-md-4': i !== 0}">
  <div class="card">
    <img class="blog-img" (click)="goToBlogDetailsPage(blog.sys.id)" 
         src="{{blog.fields.blogimage.fields.file.url}}" class="rounded" alt="">
    <div class="info">
      <h3 class="author">{{blog.fields.authorInfo}}</h3>
      <h2 (click)="goToBlogDetailsPage(blog.sys.id)" class="title">{{blog.fields.title}}</h2>
      <p class="short-desc">{{blog.fields.desciption}}</p>
      <img (click)="goToBlogDetailsPage(blog.sys.id)" class="sml-logo" 
           src="/assets/img/logos/logo_blue.png" alt="">
      <!-- <button (click)="goToBlogDetailsPage(blog.sys.id)"class="btn btn-info">Open Blog Post</button> -->
    </div>
  </div>
</div>

解释一下:

  • let i = index 会在循环中生成当前项的索引(从0开始)
  • [ngClass] 接收一个对象,键是类名,值是布尔值,当值为true时该类会被应用
  • 这样第一个帖子(索引0)会应用col-md-12,其余帖子用col-md-4,同时保留通用的blog-posts类

方案二:单独渲染首个帖子 + 循环渲染剩余帖子

如果你觉得动态绑定类不够直观,也可以把第一个帖子单独写出来,剩下的用*ngFor循环:

<!-- 首个帖子 -->
<div class="blog-posts col-md-12" *ngIf="blogs.length > 0">
  <div class="card">
    <img class="blog-img" (click)="goToBlogDetailsPage(blogs[0].sys.id)" 
         src="{{blogs[0].fields.blogimage.fields.file.url}}" class="rounded" alt="">
    <div class="info">
      <h3 class="author">{{blogs[0].fields.authorInfo}}</h3>
      <h2 (click)="goToBlogDetailsPage(blogs[0].sys.id)" class="title">{{blogs[0].fields.title}}</h2>
      <p class="short-desc">{{blogs[0].fields.desciption}}</p>
      <img (click)="goToBlogDetailsPage(blogs[0].sys.id)" class="sml-logo" 
           src="/assets/img/logos/logo_blue.png" alt="">
    </div>
  </div>
</div>

<!-- 剩余帖子 -->
<div *ngFor="let blog of blogs.slice(1)" class="blog-posts col-md-4">
  <div class="card">
    <img class="blog-img" (click)="goToBlogDetailsPage(blog.sys.id)" 
         src="{{blog.fields.blogimage.fields.file.url}}" class="rounded" alt="">
    <div class="info">
      <h3 class="author">{{blog.fields.authorInfo}}</h3>
      <h2 (click)="goToBlogDetailsPage(blog.sys.id)" class="title">{{blog.fields.title}}</h2>
      <p class="short-desc">{{blog.fields.desciption}}</p>
      <img (click)="goToBlogDetailsPage(blog.sys.id)" class="sml-logo" 
           src="/assets/img/logos/logo_blue.png" alt="">
    </div>
  </div>
</div>

这种方法的缺点是会有重复代码,所以更推荐第一种方案,代码更简洁易维护。

内容的提问来源于stack exchange,提问作者Jm3s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:43:40