2013-06-06 7 views
0

Это для углового приложения для телефона. Я бы подумал, что привязка к запросу db query, result.rows в моем случае будет возможна, но похоже, что это не так. Единственный способ, которым я мог заставить это работать, - это прокомментировать код, в котором я вручную перетаскиваю данные в массив по строкам. Это единственный способ?Web sql/Sql Lite и привязка к строке в угловом

Реально ошибку, полученную путем связывания с .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> 

ответ

0

На основании сообщения об ошибке похоже, что у вас есть более одного элемента 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 будет работать на основе broken version with 1.1.5 и working version with 1.1.4.
  • Удалить все повторяющиеся строки из undefineddata.rows

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

См. blog post и google groups post для получения дополнительной информации. Также этот pull request выглядит связанным, поэтому я не уверен, что это поведение будет продолжаться, хотя оно, похоже, было исправлено в прошлом.

+0

В запросе, который я запускаю, есть только два столбца и две строки данных, идентификатор и данные, оба из которых имеют и отображают данные. Я снижу версию и отправлю отчет, если это исправление. – lucuma

+0

У меня была возможность проверить это и столкнуться с аналогичными проблемами как с 1.1.4, так и с 1.1.5. Резервное копирование до 1.0.7 исправлено для всех, у кого есть проблемы с hashkey. – lucuma

Смежные вопросы