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

Angular中使用ng-repeat时将全名转换为名+姓氏首字母显示

嘿,刚好我之前处理过类似的需求,给你两个靠谱的AngularJS方案,看你更倾向哪种~

方案1:自定义过滤器(最推荐,复用性强)

在AngularJS里,过滤器就是专门用来做视图层数据格式化的,这种场景用它最合适,写完之后整个项目里任何地方都能复用。

先在你的模块里定义这个过滤器:

angular.module('yourAppName')
  .filter('formatName', function() {
    return function(fullName) {
      // 先处理空值,避免报错
      if (!fullName) return '';
      
      const nameParts = fullName.split(' ');
      // 如果只有名字没有姓氏,直接返回原名
      if (nameParts.length === 1) return fullName;
      
      const firstName = nameParts[0];
      // 取最后一个部分作为姓氏,提取首字母并大写加句号
      const lastNameInitial = nameParts[nameParts.length - 1].charAt(0).toUpperCase() + '.';
      
      return `${firstName} ${lastNameInitial}`;
    };
  });

然后在你的ng-repeat模板里直接用这个过滤器就行:

<div ng-repeat="item in yourRestData">
  {{ item.fullName | formatName }}
</div>
方案2:控制器预处理数据

如果你更习惯在拿到数据后就把格式处理好,不想在视图层加逻辑,也可以在请求REST接口之后直接转换数据:

angular.module('yourAppName')
  .controller('YourController', function($http) {
    const vm = this;
    
    // 请求REST接口数据
    $http.get('/your/rest/api/url')
      .then(function(response) {
        // 遍历数据,给每个条目添加格式化后的姓名字段
        vm.dataList = response.data.map(item => {
          if (item.fullName) {
            const nameParts = item.fullName.split(' ');
            if (nameParts.length > 1) {
              item.formattedName = `${nameParts[0]} ${nameParts[nameParts.length - 1].charAt(0).toUpperCase()}.`;
            } else {
              item.formattedName = item.fullName;
            }
          } else {
            item.formattedName = '';
          }
          return item;
        });
      });
  });

然后模板里直接用处理好的字段:

<div ng-repeat="item in vm.dataList">
  {{ item.formattedName }}
</div>
小提醒

如果遇到姓名中间有多个空格的情况(比如「John Michael Doe」),上面的代码会自动取最后一个部分作为姓氏,提取首字母,这符合大多数场景的需求;要是你有特殊的姓名格式要处理,稍微调整split后的逻辑就行~另外一定要处理空值,避免出现奇怪的输出哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:42:54