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

AngularJS:如何在ng-repeat中为变量赋值属性以实现翻译?

在AngularJS的ng-repeat中处理翻译的正确方式

问题解答

首先明确:你写的ng-repeat="status in statusList; a=status.val"这种语法是无效的,AngularJS的ng-repeat不支持这种分号追加变量赋值的写法,会导致模板解析错误。

下面是几种正确实现需求的方案:


方案1:直接在模板中使用翻译管道(推荐)

如果项目用了angular-translate这类翻译库,直接给status.val加上翻译管道,和处理translation.status的逻辑保持一致:

<div>
  <label for="status">{{translation.status}}</label>
  <select class="form-control" id="status" ng-model="extraItemForm.status" ng-required="true">
    <option ng-repeat="status in statusList" value="{{status.id}}">
      {{ status.val | translate }}
    </option>
  </select>
</div>

方案2:通过控制器提前处理翻译数据

如果需要复用翻译后的结果,或者翻译逻辑比较复杂,可以在控制器里预先处理statusList,给每个状态添加翻译后的属性:

// 控制器中的代码(假设已注入$translate服务)
$scope.statusList = 原statusList数组.map(status => {
  return {
    id: status.id,
    val: status.val,
    translatedVal: $translate.instant(status.val) // 提前完成翻译
  };
});

然后在模板中直接使用预处理好的翻译值:

<option ng-repeat="status in statusList" value="{{status.id}}">
  {{ status.translatedVal }}
</option>

方案3:利用翻译对象直接取值

如果translation是一个键值对形式的翻译对象(比如translation['status_active'] = '已激活'),且status.val刚好是对应的键名,那么可以直接通过对象属性访问的方式取值:

<option ng-repeat="status in statusList" value="{{status.id}}">
  {{ translation[status.val] }}
</option>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:18:35