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 для получения дополнительной информации. Кроме того, этот запрос извлечения выглядит связанным, поэтому я не уверен, что это поведение предназначено для продвижения вперед, хотя, похоже, оно было исправлено в прошлом.