无法使用 lokiJs 加载数据库
Unable to loadDatabase with lokiJs
我正在尝试创建一个数据库,其中添加了一个集合并将更改保存到 IndexedDB。
下面是我的代码
- 两个控制器 SaveController 和 LoadController。
myApp.controller('SaveController', ['$scope', 'Loki', 函数 ($scope, Loki) {
// SAVE : will save App/Key/Val as 'finance'/'test'/{serializedDb}
// if appContect ('finance' in this example) is omitted, 'loki' will be used
var idbAdapter = new LokiIndexedAdapter('finance');
var db = new loki('ProjectDb', { adapter: idbAdapter });
var coll = db.addCollection('SampleCollection');
coll.insert({ SampleId: 'Sample text.....' });
db.saveDatabase(); // could pass callback if needed for async complete
}]);
然后在我的 LoadController 中我使用
myApp.controller('LoadController', ['$scope', 'Loki', 函数 ($scope, Loki) {
var idbAdapter = new LokiIndexedAdapter('finance');
var db = new loki('ProjectDb', { adapter: idbAdapter, autoload: true });
db.loadDatabase({}, function (result) {
console.log(result);
});
alert(db.getCollection("SampleCollection"));
}]);
当我提醒 "alert(db.getCollection("SampleCollection"));" .它永远不会进入 "loadDatabase" 方法的回调。
有什么我遗漏的吗?
浏览器中的 IndexedDB
这里是页面html
编辑默认本地存储实现
我使用 loki js 的默认实现,我尝试加载离线数据库每次都显示结果为空,即使数据库存在
var offlineDb = new loki('DbOfflineNew');
offlineDb.loadDatabase({},function (result) {
console.log(result);
if (result == null) {
alert('loading for first time..');
}
else {
alert('existing load..');
}
});
每次触发警报 "loading for first time.. " 时..我在这里遗漏了什么..?
基本上您的所有逻辑都需要在 loadDatabase 回调中。如果您在加载之前尝试 console.log
集合,它将为空。很多人掉进了这个陷阱。
换句话说:
myApp.controller('LoadController', ['$scope', 'Loki', function ($scope, Loki) {
var idbAdapter = new LokiIndexedAdapter('finance');
var db = new loki('ProjectDb', { adapter: idbAdapter, autoload: true });
db.loadDatabase({}, function (result) {
console.log(result);
// put your log call here.
alert(db.getCollection("SampleCollection"));
});
}]);
希望对您有所帮助。
我正在尝试创建一个数据库,其中添加了一个集合并将更改保存到 IndexedDB。
下面是我的代码
- 两个控制器 SaveController 和 LoadController。
myApp.controller('SaveController', ['$scope', 'Loki', 函数 ($scope, Loki) {
// SAVE : will save App/Key/Val as 'finance'/'test'/{serializedDb}
// if appContect ('finance' in this example) is omitted, 'loki' will be used
var idbAdapter = new LokiIndexedAdapter('finance');
var db = new loki('ProjectDb', { adapter: idbAdapter });
var coll = db.addCollection('SampleCollection');
coll.insert({ SampleId: 'Sample text.....' });
db.saveDatabase(); // could pass callback if needed for async complete
}]);
然后在我的 LoadController 中我使用
myApp.controller('LoadController', ['$scope', 'Loki', 函数 ($scope, Loki) {
var idbAdapter = new LokiIndexedAdapter('finance');
var db = new loki('ProjectDb', { adapter: idbAdapter, autoload: true });
db.loadDatabase({}, function (result) {
console.log(result);
});
alert(db.getCollection("SampleCollection"));
}]);
当我提醒 "alert(db.getCollection("SampleCollection"));" .它永远不会进入 "loadDatabase" 方法的回调。
有什么我遗漏的吗?
浏览器中的 IndexedDB
这里是页面html
编辑默认本地存储实现
我使用 loki js 的默认实现,我尝试加载离线数据库每次都显示结果为空,即使数据库存在
var offlineDb = new loki('DbOfflineNew');
offlineDb.loadDatabase({},function (result) {
console.log(result);
if (result == null) {
alert('loading for first time..');
}
else {
alert('existing load..');
}
});
每次触发警报 "loading for first time.. " 时..我在这里遗漏了什么..?
基本上您的所有逻辑都需要在 loadDatabase 回调中。如果您在加载之前尝试 console.log
集合,它将为空。很多人掉进了这个陷阱。
换句话说:
myApp.controller('LoadController', ['$scope', 'Loki', function ($scope, Loki) {
var idbAdapter = new LokiIndexedAdapter('finance');
var db = new loki('ProjectDb', { adapter: idbAdapter, autoload: true });
db.loadDatabase({}, function (result) {
console.log(result);
// put your log call here.
alert(db.getCollection("SampleCollection"));
});
}]);
希望对您有所帮助。