sqlite选择的数据未显示为ng-repeat

时间:2015-02-20 15:06:22

标签: javascript html angularjs sqlite ionic-framework

我从listItems.push调用数据(res.rows.item(i).name);通过ng-repeat到列表。所以我得到了一个SQLite中存在的名字列表。

这是我的controllers.js

$scope.createList = function () {

    var value1 = document.getElementById("List").value;
    alert(value1);
    var db = $cordovaSQLite.openDB({ name: "Bd_DB.db" });

    var query = "INSERT INTO List (name) VALUES (?)";

    $cordovaSQLite.execute(db, query, [value1]).then(function (res) {

        console.log("insertId: " + res.insertId);
    }, function (err) {
        alert(err);
        console.error(err);
    });

    $scope.getAllLists();

};

$scope.getAllLists = function () {

    var listItems= [];
    var query = "SELECT * FROM List";
    $cordovaSQLite.execute($cordovaSQLite.openDB({ name: "Bd_DB.db" }), query).then(function (res) {

        if (res.rows.item(0).name !="") {

            for (var i = 0; i < res.rows.length; i++) {

              listItems.push(res.rows.item(i).name);



            }
        }

    });

}

我试过了,但它没有显示任何类型的列表。我不知道,我做错了什么。请告诉我正确的代码。谢谢 这是我的Html:

 <div class="bar bar-header">
  <button class="button icon-left ion-chevron-left button-clear button-dark"            ng-click="closeModal()" ></button>
  <h1 class="title">Your List</h1>
  <button class="button" ng-click="createListPopup()"> Create List</button>
</div>

我的待办事项列表

<ion-content>


      <div ng-repeat= "name in listItems">

    {{item.name}}

  </div>


</ion-content>

  

2 个答案:

答案 0 :(得分:2)

sqlite事务是同步的,所以在create list中,你必须在execute的成功回调中调用getList: 喜欢:  $ scope.createList = function(){

var value1 = document.getElementById("List").value;
alert(value1);
var db = $cordovaSQLite.openDB({ name: "Bd_DB.db" });

var query = "INSERT INTO List (name) VALUES (?)";

$cordovaSQLite.execute(db, query, [value1]).then(function (res) {

    console.log("insertId: " + res.insertId);
     $scope.getAllLists();

}, function (err) {
    alert(err);
    console.error(err);
});

};

此外,在getAllLists中,无论.execute的状态如何,函数都将结束,因此您必须绑定到在成功回调中设置的变量。

$scope.listItems= [];

$ scope.getAllLists = function(){

var query = "SELECT * FROM List";
$cordovaSQLite.execute($cordovaSQLite.openDB({ name: "Bd_DB.db" }), query).then(function (res) {
    $scope.listItems= [];
    if (res.rows.item(0).name !="") {

        for (var i = 0; i < res.rows.length; i++) {

          listItems.push(res.rows.item(i).name);

        }
        $scope.$apply();
    }
}

最后,您必须使用$ scope。$ apply()将结果反映到视图中。

答案 1 :(得分:0)

尝试将var listItems= []更改为范围变量

$scope.listItems = [];
....
$scope.listItems.push({name:'item 1'})

然后在你看来:

<ion-content>
  <div ng-repeat= "item in listItems">
      {{item.name}}
  </div>
</ion-content>