Web sql/Sql Lite и привязка к строке в Angular

Это для углового приложения. Я бы подумал, что связывание с возвратом запроса БД, result.rows в моем случае было бы возможно, но кажется, что это не так. Единственный способ, которым я мог заставить это работать, был с закомментированным кодом, где я вручную помещал данные в массив строка за строкой. Это единственный способ?

Фактическая ошибка, полученная связыванием с .rows является: Error: Duplicates in a repeater are not allowed. Repeater: item in items key: undefined:undefined

Сервис:

// only portion of code shown
query: function (q) {
        var d = $q.defer();
        var db = this.getDb();

        db.transaction(function (t) {
            t.executeSql(q, [], function (tx, results) {
                d.resolve(results);
            }, function (err) {
                d.reject(err);
            });

        }, function (err) {
            d.reject(err);
        }
        );

        return d.promise;
     }

Контроллер выглядит так:

  Sql.query('select * from DEMO').then(function (data) {
                console.log(data);
                //$scope.items = [];

                //for (i = 0, l = data.rows.length; i < l; i++) {
                    //$scope.items.push(data.rows.item(i));
                //}

                $scope.items = data.rows;  // this errors out
                $scope.$safeApply();
            });

Повторитель прост:

<div ng-repeat='item in items'>{{item.id}} {{item.data}}</div>

1 ответ

Решение

Судя по сообщению об ошибке, похоже, у вас более одного undefined элемент в data.rows массив.

Ваш рабочий код использует data.rows.item(i) это создает новый пустой объект вместо неопределенного? Попробуйте изменить data.rows.item(i) в data.rows[i] в вашем рабочем коде это тоже ломается?

Предполагая, что вы используете угловой 1.1.5, вот несколько вариантов:

  • Используйте ваш текущий обходной путь
  • Понижение до 1.1.4 или до текущей стабильной версии 1.0.7. Я думаю, что 1.1.4 будет работать на основе сломанной версии с 1.1.5 и рабочей версии с 1.1.4.
  • Удалить все дубликаты undefined строки из data.rows

Примечание: для других, имеющих подобный тип ошибки, Angular генерирует $$hashKey к объектам при выполнении ng-repeat, Эта ошибка указывает, что тот же объект находится в массиве (с тем же $$hashKey) и не допускается в 1.1.5 (и позже?).

См. Этот пост в блоге и пост группы Google для получения дополнительной информации. Кроме того, этот запрос извлечения выглядит связанным, поэтому я не уверен, что это поведение предназначено для продвижения вперед, хотя, похоже, оно было исправлено в прошлом.

Другие вопросы по тегам