离子收集重复 - 错过要由websql数据库填充

时间:2014-12-26 19:50:18

标签: javascript angularjs ionic-framework

我有一些离子收集重复的麻烦。我无法显示来自Web sql数据库的填充列表。 我的控制器看起来像:

.controller('femmeListCtrl', function($scope) {
    $scope.dataFemme = [];
    db.transaction(function(tx) {
        tx.executeSql('SELECT * FROM datafemme', [], function(tx, results) {
            for (var i = 0; i < results.rows.length; i++) {
                $scope.dataFemme[i] = {
                    id: results.rows.item(i).id
                    , 'code_patient': results.rows.item(i).code_patient
                };
            }
        });
    });
})
<div class="list">
  <a class="item my-item"
     collection-repeat="item in dataFemme | filter:filter"
     collection-item-height="90"
     collection-item-width="'100%'">
    <h2>{{ item.code_patient }}</h2>

  </a>
</div>

请帮助。

3 个答案:

答案 0 :(得分:0)

问题是Angular不知道变量已经改变。只需在for循环结束时添加$ timeout。

<强>编辑:

.factory('femmeService', function($q) {
    var femmeService = {};

    femmeService.dataFemme = [];

    femmeService.getAll = function() {
        var deferred = $q.defer();
        db.transaction(function(tx) {
            tx.executeSql('SELECT * FROM datafemme', [], function(tx, results) {
                for (var i = 0; i < results.rows.length; i++) {
                    femmeService.dataFemme[results.rows.item(i).id] = {
                        'id': results.rows.item(i).id,
                        'code_patient': results.rows.item(i).code_patient
                    };
                }
                deferred.resolve();
            });
        });

        return deferred.promise;
    };

    return femmeService;
});

然后在控制器中:

femmeService.getAll().then(function() {
    $scope.dataFemme = femmeService.dataFemme;
});

答案 1 :(得分:0)

我改变了代码: 我在

下创建了新服务
.factory('femmeService', function($timeout) {
var dataFemme = [];
db.transaction(function(tx) {
    tx.executeSql('SELECT * FROM datafemme', [], function(tx, results) {
        for (var i = 0; i < results.rows.length; i++) {
            //dataFemme[results.rows.item(i).id] = {
            dataFemme[i] = {
                id: results.rows.item(i).id
                , 'code_patient': results.rows.item(i).code_patient
            };
        }
        $timeout(function() {
            dataFemme;
        }, 3000);
    });
});
return {
    all: function() {
        return dataFemme;
    },
    get: function(id) {

        return dataFemme[id];
    }
};})

并且还更改了控制器

.controller('femmeListCtrl', function($scope, femmeService) {
$scope.dataFemme = femmeService.all();})

我已经解决了这个问题

答案 2 :(得分:0)

谢谢@Leandro Zubreski,在服务中使用$ timeout后,错误是dataFemme的索引[results.rows.item(i).id]所以我用了这个

dataFemme[i] = {
            id: results.rows.item(i).id
            , 'code_patient': results.rows.item(i).code_patient
        };

一切都正常。