将列值转换为ng-repeat中的映射值

时间:2015-11-13 20:11:34

标签: angularjs ng-grid

紧张地问这个问题。讨厌投票......但它就是这样,我已经搜索过,无法找到解决方案。

我最终做的是添加一个遍历searchResults的循环,并在服务在成功块内返回后重新分配列的值(PSEUDO CODE HERE,我无法复制并粘贴我的实际代码,有一个气隙):

var myNumberMap = {
  1: "Number ONE!!",
  2: "Number TWO!!",
  3: "Number THREE!!!"
}

$scope.getSearchResults = function() {
  $q.all({
      resultSet : searchService.getSearchResults()
}).then(function(resultData) {
    searchResults = resultData.resultSet;
    for(var i = 0; i < searchResults.length; i++) {
      searchResults[i].number = myNumberMap[searchResults[i].number];
    }
 }
}

我真的希望有一些灵巧的方法我可以将网格配置中的数据结果值分配给地图中的值吗?

类似的东西:

$scope.myCoolGridConfig = NgGridConfig.getConfig(
  NgGridConfig.getDefaultConfig(), {
  data: 'searchModel.searchResults.list',
  columnDefs: [
     field: 'number',
     displayName: 'Number',
     value: myNumberMap[searchModel.searchResults.list.number]
  ]
 }

)

2 个答案:

答案 0 :(得分:1)

如果我正确地互相探讨了你正在寻找这些问题的话。

myMap = {
    1 : "String One",
    2 : "String Two",
    3 : "String Three"
};

如果col编号为1,则在表

中显示String One而不是one

使用myMap并在其中查找col的prop以获取字符串值

<table>
    <tr ng-repeat="col in tempCols">
      <td>{{col}}</td>
      <td>{{myMap[col]}}</td>
    </tr>
</table>

如果需要对没有定义索引的对象(如下面的对象)执行此操作。

$scope.objectData = [{
  name: "test1",
},
{
  name: "test1",
},
{
  name: "test1",
},
{
  name: "test1",
},
{
  name: "test1",
},
]

您可以通过$ index + 1

跟踪它
 <table>
      <tr>
        <td> Column Converted</td>
        <td> Object name value</td>
      <tr ng-repeat="col in objectData">
       <td>{{myMap[$index + 1]}}</td>
       <td>{{col.name}}</td>
      </tr>
    </table>

为了更好的视觉效果,我需要plunker

答案 1 :(得分:1)

您可以在此处采取一些方法:

  1. 创建一个应用于ng-repeat的custom filter,根据地图转换值。

  2. 将您的值映射存储在角度控制器中,并将映射值绑定到DOM。

    // Controller
    $scope.myMap = {
      1 : "String One",
      2 : "String Two",
      3 : "String Three"
    }
    
    // something.html
    <div ng-repeat='num in numList'>
      {{myMap[num]}}
    </div>