Как пропустить $$ hashKey в ngRepeat - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь сделать несколько таблиц динамически из объекта.Это мой объект

{
  categories: ["kids", "home"],
  home: [{
    name: "home 1.1",
    title: " home1.2"
  }, {
    name: "home 2.1",
    title: "home 2.2"
  }, {
    name: "home 3.1",
    title: "home 3.2"
  }, {
    name: "home 4.1",
    title: "home 4.2"
  }, {
    name: "home 5.1",
    title: "home 5.2"
  }],
  kids: [{
    name: "kids 1.1",
    title: "kids 1.2"
  }]
}

Мой рабочий код

var app = angular.module("app", []);

app.controller("MainCtrl", function($scope) {
  $scope.data = {
    categories: ["kids", "home"],
    home: [{
      name: "home 1.1",
      title: " home1.2"
    }, {
      name: "home 2.1",
      title: "home 2.2"
    }, {
      name: "home 3.1",
      title: "home 3.2"
    }, {
      name: "home 4.1",
      title: "home 4.2"
    }, {
      name: "home 5.1",
      title: "home 5.2"
    }],
    kids: [{
      name: "kids 1.1",
      title: "kids 1.2"
    }]
  };


  $scope.getKeys = function(obj) {
    if (!$scope.data.hasOwnProperty(obj)) {
      return [];
    }

    return Object.keys($scope.data[obj][0]);
  }
});
<html ng-app="app">

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js"></script>
</head>

<body ng-controller="MainCtrl">
  <table ng-repeat="d in data.categories">
    <tr>
      <th ng-repeat="l in getKeys(d)" ng-if="$index != getKeys(d).length - 1">
        {{$index != getKeys(d).length - 1}} {{l}}
      </th>
    </tr>
    <tr ng-repeat="k in data[d]">
      <td>{{k.name}}</td>
      <td>{{k.title}}</td>
    </tr>
  </table>
</body>

</html>

Как видно из примера, условие ng-if="$index != getKeys(d).length - 1" является ложным, но в нем отображается столбец $$ hashKey .Как я могу пропустить это?

Я попробовал некоторые из решений этого ответа:

  • angular.copy ()
  • angular.toJson()
  • l != '$$hashKey'

Сейчас:

  1. Почему это условие ложное, но в нем отображается столбец?
  2. Чтоправильный способ получить имена столбцов для каждой таблицы?

1 Ответ

0 голосов
/ 01 июня 2018

Вы используете очень старую версию AngularJS.Эта проблема давно решена с версии 1.2.0 Проверьте приведенный ниже пример, который я создал, он работает для всех версий библиотеки от 1.2.0 до самой последней версии 1.6.x

PlunkerПример

...