Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度索引中的自定义查询_Angularjs_Indexeddb - Fatal编程技术网

Angularjs 角度索引中的自定义查询

Angularjs 角度索引中的自定义查询,angularjs,indexeddb,Angularjs,Indexeddb,我正在我的应用程序中使用。基本CRUD操作工作正常,但自定义查询未按预期工作。 我正在使用代码 angular.module('myModuleName', ['indexedDB']) .config(function ($indexedDBProvider) { $indexedDBProvider .connection('myIndexedDB') .upgradeDatabase(1, function(event,

我正在我的应用程序中使用。基本CRUD操作工作正常,但自定义查询未按预期工作。 我正在使用代码

 angular.module('myModuleName', ['indexedDB'])
      .config(function ($indexedDBProvider) {
        $indexedDBProvider
          .connection('myIndexedDB')
          .upgradeDatabase(1, function(event, db, tx){
            var objStore = db.createObjectStore('people', {keyPath: 'ssn'});
            objStore.createIndex('name_idx', 'age', {unique: false});
            objStore.createIndex('name_idx, age_idx', ['name', 'age'] , {unique: false});
    });
基本查询操作的工作原理如下

$indexedDB.openStore('people', function(x){
   var find = x.query();
   find = find.$eq('John');
   find = find.$index("name_idx");    
   x.eachWhere(find).then(function(e){
      $scope.list= e;
   });
});
这将导致以下查询

select * from people where name='John'
但是,在上面的场景中,我们如何执行像

select * from people where name='John' and age='25';
delete from people where name='John' and age='25';

您正在使用的库没有复杂的查询,但是您可以为它编写一个纯js解决方案,类似如下:

首先,您需要将索引定义为:

objStore.createIndex('name_age_idx', ['name', 'age'] , {unique: false});
然后,您可以只对那些与搜索结果匹配的值进行搜索查询

searchIndexedDB=函数(名称、年龄、回调){
var request=indexedDB.open(dbName);
request.onsuccess=函数(e){
var db=e.target.result;
var trans=db.transaction(objectStoreName,'readonly');
var store=trans.objectStore(objectStoreName);
var index=store.index('name_age_idx');
var keyRange=IDBKeyRange.only([姓名,年龄]);
//打开具有相同名称和年龄的所有对象的索引
var openCursorRequest=index.openCursor(keyRange);
openCursorRequest.onsuccess=函数(e){
让结果=e.target.result;
//首先检查是否找到值
如果(结果){
回调(result.value);//每个对象都将调用您的回调
//result.delete()-删除对象
result.continue();//继续-调用下一个游标请求
}
};
trans.oncomplete=函数(e){
db.close();
};
openCursorRequest.onerror=函数(e){
log(“获取错误:”,e);
};
};
request.onerror=myStorage.indexedDB.onerror;

}
您正在使用的库没有复杂的查询,但是您可以为它编写一个纯js解决方案,类似如下:

首先,您需要将索引定义为:

objStore.createIndex('name_age_idx', ['name', 'age'] , {unique: false});
然后,您可以只对那些与搜索结果匹配的值进行搜索查询

searchIndexedDB=函数(名称、年龄、回调){
var request=indexedDB.open(dbName);
request.onsuccess=函数(e){
var db=e.target.result;
var trans=db.transaction(objectStoreName,'readonly');
var store=trans.objectStore(objectStoreName);
var index=store.index('name_age_idx');
var keyRange=IDBKeyRange.only([姓名,年龄]);
//打开具有相同名称和年龄的所有对象的索引
var openCursorRequest=index.openCursor(keyRange);
openCursorRequest.onsuccess=函数(e){
让结果=e.target.result;
//首先检查是否找到值
如果(结果){
回调(result.value);//每个对象都将调用您的回调
//result.delete()-删除对象
result.continue();//继续-调用下一个游标请求
}
};
trans.oncomplete=函数(e){
db.close();
};
openCursorRequest.onerror=函数(e){
log(“获取错误:”,e);
};
};
request.onerror=myStorage.indexedDB.onerror;

}
查看该提供程序的源代码,该提供程序似乎只对单个键执行查询。您可能需要修改该提供程序的源代码并编写自己的多键查询函数,或者在客户端编写筛选器以排除额外数据。对不起,我是indexeddb中的新手。我们不能使用配置的索引组合获取这些详细信息吗?例如,objStore.createIndex('name_idx,age_idx',['name','age'],{unique:false});查看该提供程序的源代码,该提供程序似乎只对单个键执行查询。您可能需要修改该提供程序的源代码并编写自己的多键查询函数,或者在客户端编写筛选器以排除额外数据。对不起,我是indexeddb中的新手。我们不能使用配置的索引组合获取这些详细信息吗?例如,objStore.createIndex('name_idx,age_idx',['name','age'],{unique:false});