Как сохранить объекты Firebase $ asArray () с angularFire, когда объекты содержат ng-repeat

Я недавно перешел с angularfire 0.6 на 0.8.0. У меня проблемы с сохранением элемента списка, который содержит сам массив.

Мои объектыучетная запись выглядеть так:

{
  "-JQruasomekeys0nrXxH" : {
    "created" : "2014-03-23T22:00:10.176Z",
    "durations" : [ {
      "$hashKey": "00L", // this is generated by ng-repeat on arrays
      "end" : "2014-07-15T22:00:00.000Z",
      "start" : "2014-07-09T22:00:00.000Z"
    } ],
    "email" : "[email protected]",
  }
}

Длительности представляют собой массив периодов времени с началом и концом, которые напоминают повторение ng двух полей ввода в HTML.

<tr ng-repeat="duration in account.durations">
  <td>
     <input ng-model="duration.start" datepicker>
  </td>
  <td>
     <input ng-model="duration.end" datepicker>
  </td>
</tr>

Перед сохранением учетной записи в firebase я делаю angular.copy ($ scope.account) в контроллере, чтобы избавиться от угловых значений $ hash. Это сработало в angularfire 0.6.0.

В angularfire 0.8.0 я все еще получаю ошибку:

Ошибка: Firebase.set не удалось: первый аргумент содержит недопустимый ключ ($ hashKey) в свойстве durations.0. Ключи должны быть непустыми строками и не должны содержать ".", "#", "$7$quot;, "/", "[" Или "]

Как решить эту проблему с помощью angularfire при работе с объектами, которые имеют массивы внутри себя? Длительности не будут единственным массивом, который я буду иметь в пределах учетной записи. Так есть ли более профессиональное решение, или мне нужно angular.copy каждый объект массива, прежде чем сохранить в firebase через angularfire?

Заранее спасибо за любой намек.

Обновление (11 августа 14) После небольшого исследования проблема не в том, что использование angular.copy () больше не работает. на самом деле это так. Но очень просто обновить / изменить существующий набор данных с помощью метода angularfire $ save () (https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-firebaseobject-save) Потому что я не могу найти правильный способ $ save () для элемента после выполнения angular.copy ().

Обновление 2 (12 августа, 14) Я нашел обходной путь на данный момент, но на самом деле обходной путь - это то, чего я хотел избежать в первую очередь:

// loop for every duration, that should clean the object from "$hashKey" attributes
angular.forEach($scope.account.durations, function (value, index) {
  var cleanValue = {};

  // checks, if the date is a JSON string already
  if (typeof value.start === 'string') {
    cleanValue.start = value.start;
  } else {
    cleanValue.start = value.start.toJSON();
  }

  // checks, if the date is a JSON string already
  if (typeof value.end === 'string') {
    cleanValue.end = value.end;
  } else {
    cleanValue.end = value.end.toJSON();
  }

  // overwrite the array object at index to get loose of $hashKey
  $scope.account.durations[index] = cleanValue;
});

Я думаю, что этот обходной путь использует преимущества основанного на документе принципа в Firebase, так как я должен знать точные атрибуты объекта перед его сохранением через AngularFire.

Обновление 3 (13. Авг 14) Я добавил jsfiddle, чтобы показать проблему:jsfiddle.net/1fem6byt

Если вы добавите строки в массив, а затем попытаетесь сохранить объект в базе данных, в консоли появится ошибка $ hashKey (приведенная выше). Есть способы обойти эту проблему, но я ищу более простое или более чистое решение с angularfire, если это возможно. Я могу неправильно добавлять строки - или я что-то пропустил?

Ответы на вопрос(1)

Ваш ответ на вопрос