我已将app-preferences插件添加到我的离子项目中。 当我在我的Android设备上运行并尝试存储密钥时,我得到了下一个错误:
TypeError: string is not a function
at nativeExec (http://10.0.0.28:8100/plugins/cordova-plugin-app-preferences/www/apppreferences.js:175:11)
at AppPreferences.store (http://10.0.0.28:8100/plugins/cordova-plugin-app-preferences/www/apppreferences.js:187:3)
at Object.store (http://10.0.0.28:8100/lib/ngCordova/dist/ng-cordova.min.js:9:10072)
at set (http://10.0.0.28:8100/js/just-go.js:1104:29)
at setUser (http://10.0.0.28:8100/js/just-go.js:1276:27)
at http://10.0.0.28:8100/js/just-go.js:1069:23
at processQueue (http://10.0.0.28:8100/lib/ionic/js/ionic.bundle.js:27747:28)
at http://10.0.0.28:8100/lib/ionic/js/ionic.bundle.js:27763:27
at Scope.$eval (http://10.0.0.28:8100/lib/ionic/js/ionic.bundle.js:29026:28)
at Scope.$digest (http://10.0.0.28:8100/lib/ionic/js/ionic.bundle.js:28837:31)
这是我存储密钥的代码片段:
function set(key, value) {
var defer = $q.defer();
console.log("Setting keys");
$cordovaPreferences.store(key, value)
.success(function(data) {
console.log("key set");
defer.resolve(data);
})
.error(function(error) {
defer.reject(error);
console.log("fail to set");
console.log(error);
});
return defer.promise;
};
任何人都知道问题是什么?
参数I; m发送是"令牌"作为键和一些字符串作为值..
PS可以在浏览器上使用此插件运行吗? (用于检测) 当我尝试用它做一些事情我得到插件没有启用/
答案 0 :(得分:0)
由于apppreferences.js文件以这种方式定义 store 方法,第一个和第二个param必须有函数而不是字符串:
/**
* Set a preference value
*
* @param {Function} successCallback The function to call when the value is set successfully
* @param {Function} errorCallback The function to call when value is not set
* @param {String} dict Dictionary for key (OPTIONAL)
* @param {String} key Key
* @param {String} value Value
*/
AppPreferences.prototype.store = platform.store || function (
successCallback, errorCallback, dict, key, value
) {
....
}
在你的函数 set 中,两个字符串键和值都作为第一个和第二个参数而不是函数传递。
答案 1 :(得分:0)
我的项目遇到了同样的问题。 您使用ECMALcript5.1的compiller构建项目,此插件使用ECMAScript6(Promise)中的全局变量。 你必须将ECMAScript6的编译器添加到你的IDE(对我而言,它是WebStorm,我添加了babel,你可以阅读这个标题http://blog.jetbrains.com/webstorm/2015/05/ecmascript-6-in-webstorm-transpiling/) 之后你必须添加es6-promise https://www.npmjs.com/package/es6-promise。
答案 2 :(得分:0)
好像你的ngCordova和插件版本之间存在不匹配。实际上没有检查升级ngCordova是否有效,但如果你不想升级ngCordova,你可以直接使用插件或修改ngCordova:
用回调替换他们的storeResult承诺
// var storeResult;
// if(arguments.length === 3){
// storeResult = $window.plugins.appPreferences.store(dict, key, value);
// } else {
// storeResult = $window.plugins.appPreferences.store(key, value);
// }
// storeResult.then(ok, errorCallback);
if(arguments.length === 3){
storeResult = $window.plugins.appPreferences.store(ok, errorCallback, dict, key, value);
} else {
storeResult = $window.plugins.appPreferences.store(ok, errorCallback, key, value);
}
在商店,获取和删除功能