【问题标题】:sqlite selected data not showing to ng-repeatsqlite 选择的数据未显示给 ng-repeat
【发布时间】:2015-04-22 07:34:42
【问题描述】:

我从 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>

【问题讨论】:

    标签: javascript html angularjs sqlite ionic-framework


    【解决方案1】:

    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() 将结果反映到视图中。

    【讨论】:

    • 哇,这行得通!我只是添加“$scope.$apply();”行,这真的让我很困惑,这里似乎没有代码“在 angularjs 框架之外”,那么为什么要使用 $apply 呢?
    【解决方案2】:

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

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

    然后在你看来:

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

    【讨论】:

    • 仍然没有得到任何东西。在控制台元素中,它显示 ng-repeat 没有其他评论。
    • 嘿萨尔曼,你设法解决了这个问题吗?我也面临同样的问题。 ng-repeat 会自动添加注释。
    • 嘿@vkm,抱歉回复晚了。我通过将 listItems 放入 $scope 然后在我的视图中调用该 $scope 解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多