【问题标题】:ngCordova doesn't work with sqlite Plugin in a browserngCordova 不适用于浏览器中的 sqlite 插件
【发布时间】:2016-03-01 23:07:38
【问题描述】:

我正在构建我的科尔多瓦 APP。创建一个空白项目后,我用 bower 安装 ngCordova,然后安装 ngCordova。我在 index.html 中添加了 ngCordova 脚本(在 ionic.bundle.js 之后和 cordova.js 之前)。然后我安装了一个 sqlite 插件。这就是 bug 出现的地方。

我不能在我的 Safari 浏览器中通过 Web Inspector 进行调试,因为我的 ngCordova 不能很好地与浏览器中的 sqlite 插件配合使用。我正在使用 cordova-sqlite-storage 0.7.15-dev "Cordova s​​qlite storage plugin" 插件,但我的网络检查器不断抱怨 "TypeError: undefined is not an object (evalating 'n.sqlitePlugin.openDatabase')"

我对 ngCordova 进行了一些研究,发现了这个 http://ngcordova.com/docs/common-issues/。根据文档,我应该在我的真实设备而不是浏览器上开发,因为某些插件在模拟器中不起作用,例如相机插件。但是我只需要使用浏览器应该支持的sqlite插件。

有谁知道如何使 ngCordova 与浏览器中的 sqlite 插件一起正常工作?

科尔多瓦版本:5.4.1 iPhone 5c:iOS 9.1 苹果电脑:10.10.5 Xcode:7.1.1

我的 controller.js 文件已附加。

var db = null;

angular.module('starter.controllers', ['ionic','ngCordova'])

.run(function($ionicPlatform, $cordovaSQLite) {
        $ionicPlatform.ready(function() {
            if(window.cordova && window.cordova.plugins.Keyboard) {
                cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
            }
            if(window.StatusBar) {
                StatusBar.styleDefault();
            }
            db = $cordovaSQLite.openDB("my.db");
            $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS people (id integer primary key, firstname text, lastname text)");
        });
})

.controller('SqliteCtrl', function($scope, $cordovaSQLite) {

    $scope.insert = function(firstname, lastname) {
        alert("test");
        var query = "INSERT INTO people (firstname, lastname) VALUES (?,?)";
        $cordovaSQLite.execute(db, query, [firstname, lastname]).then(function(res) {
            alert("INSERT ID -> " + res.insertId);
        }, function (err) {
            alert(err);
        });
    }

    $scope.select = function(lastname) {
        var query = "SELECT firstname, lastname FROM people WHERE lastname = ?";
        $cordovaSQLite.execute(db, query, [lastname]).then(function(res) {
            if(res.rows.length > 0) {
                console.log("SELECTED -> " + res.rows.item(0).firstname + " " + res.rows.item(0).lastname);
            } else {
                console.log("No results found");
            }
        }, function (err) {
            console.error(err);
        });
    }

});

【问题讨论】:

  • 您应该在此处粘贴您的controller.js 代码。我们需要查看代码,而不是图像。您可以使用edit 链接更新您的答案。
  • 哪一行指向你的错误?
  • 已经有一堆与您的问题相关的 SO 问题...例如 here 或 here
  • 谢谢。 if (window.cordova && window.SQLitePlugin) { var db = $cordovaSQLite.openDB('accounts.db', 1 ); } else { db = window.openDatabase('accounts', '1.0', 'accounts.db', 100 * 1024 * 1024); } 修复我的错误

标签: ios xcode cordova debugging console


【解决方案1】:

我的建议是让您在不使用 SQLite 插件的情况下尽可能多地使用 SQLite,而无需在 Cordova 上使用插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2023-03-13
    • 2012-06-14
    相关资源
    最近更新 更多