Javascript 用于转换的映射组合框选项

Javascript 用于转换的映射组合框选项,javascript,angularjs,angular-translate,Javascript,Angularjs,Angular Translate,我的数据模型中有一堆状态名称,我想映射到不同的键进行转换,例如 打开->状态\打开 新建->状态\新建 等待批准->状态等待批准 当前,我的组合框按以下方式填充: <select class="form-control select" id="client" ng-model="statusType" ng-change="setStatusType(statusType)" ng-options="statusType.name for statusType in sta

我的数据模型中有一堆状态名称,我想映射到不同的键进行转换,例如

  • 打开->状态\打开
  • 新建->状态\新建
  • 等待批准->状态等待批准
当前,我的组合框按以下方式填充:

<select class="form-control select" id="client"
  ng-model="statusType"
  ng-change="setStatusType(statusType)"
  ng-options="statusType.name for statusType in statusTypes track by statusType.id">
  <option value="">-</option>
</select>
但是,这将假定我的翻译密钥等于州名称。我更愿意将我的州名映射到上面提到的翻译键

我如何在Angular中实现此机制?我可能需要某种自定义指令(?)。我是新来的,所以欢迎所有提示

我在想这样的事情:

mapStateToTranslationKey(statusType.name) -> return "status_" + toLowerCase(replaceSpacesWithUnderscores(statusType.name))
从这个链接,我的假设是Angular不翻译任何东西,你需要编写代码告诉Angular“嘿,当你看到这个词时,把它翻译成这个词。”


您可能期望的功能不存在。我认为在translate函数中,您需要使用Javascript编写,使用Angular函数“.translations()”您需要显式地转换名称和键。然后,返回您期望的单个值。

我自己设法解决了这个问题。基本上,我必须将此功能添加到我的控制器:

$scope.mapStateToTranslationKey = function(stateName) {
   return "state_" + stateName.toLowerCase().split(' ').join('_');
};
此函数将状态名称转换为小写,用下划线替换所有空格,最后在字符串
state\uuu
前面加上前缀。最后,它返回一个键,我可以使用角度平移进行平移

在视图中,我现在必须首先调用我的函数,然后在管道符号后使用
translate
关键字。这样,将使用转换键而不是实际的状态名称

<select class="form-control select" id="client"
   ng-model="statusType"
   ng-change="setStatusType(statusType)"
   ng-options="mapStateToTranslationKey(statusType.name) | translate for statusType in statusTypes track by statusType.id">
  <option value="">-</option>
</select>

-

有一个称为“角度平移”的角度扩展,我正在使用它:
<select class="form-control select" id="client"
   ng-model="statusType"
   ng-change="setStatusType(statusType)"
   ng-options="mapStateToTranslationKey(statusType.name) | translate for statusType in statusTypes track by statusType.id">
  <option value="">-</option>
</select>