0

这是一个 phonegap 角度应用程序。我本以为绑定到 db 查询返回,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>
4

1 回答 1

0

根据错误消息,您似乎在数组中有多个undefined项目。data.rows

您的工作代码使用data.rows.item(i)的是创建一个新的空对象而不是未定义?尝试在您的工作代码中更改data.rows.item(i)data.rows[i]是否也会中断?

假设您使用的是 angular 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 群组文章。这个拉取请求看起来也很相关,所以我不确定这种行为是否打算继续进行,尽管它似乎在过去已经修复。

于 2013-06-07T15:29:44.800 回答