我在Cordova项目中使用Angular和WebSQL,并且我已经启动了一个新的列表控制器,它将从WebSQL数据库中列出表的结果。
我有一个查询数据库的sqlSvc,如下所示:
service.upc = function(newUpc) {
var deferred = $q.defer();
var resolveResults = function (tx, results) {
deferred.resolve(results.rows);
}
var selectUpcs = function() {
var queryString = "SELECT * FROM UPC";
service.db.transaction(function (tx) {
tx.executeSql(queryString, [], resolveResults, rejectWithError);
});
}
deferUntilInit(function () {
if (newUpc) {
insertOrReplaceAndSelect(newUpc); //omitted
} else {
selectUpcs();
}
});
return deferred.promise;
}
所有控制器都这样做:
var listCtrl = function($scope, sqlSvc) {
sqlSvc.upc().then(function(result) {
$scope.list = result;
});
}
angular.module("RDb").controller("listCtrl", ["$scope", "sqlSvc", listCtrl]);
它与简单的UI视图模板绑定:
<div id="scanList">
<ul class="list-unstyled">
<li ng-repeat="scan in list">
<div>{{scan.upc}} ({{scan.datetime}})</div>
</li>
</ul>
</div>
这给了我$ 10 digest迭代到达错误,它似乎是由WebSQL返回其结果的方式引起的。如果我深度复制数据,将resolveResults
更改为:
var data = JSON.parse(JSON.stringify(results.rows));
deferred.resolve(results.rows);
我希望能够让这项服务工作,而无需深入复制它获得的每个结果集。任何人都可以帮助我理解为什么会这样吗?