在一个Ionic应用程序中,我的一个JavaScript函数出现了问题,该函数又被另一个函数调用了。我总是得到一个错误,未定义函数getSqlSelect。但是这些功能都是在services.js脚本中定义的。
这是来自services.js的代码的简短版本:
.factory('LocalDatabase', function () {
var arrResult = "";
return {
select: function (table, filterAttributesArr, success) {
var sql = getSqlSelect(table, filterAttributesArr);
var db = window.sqlitePlugin.openDatabase({ name: 'p16.sqlite', location: 0 });
},
getSqlSelect: function (tablename, filterAttributesArr) {
return "";
}
};
})
那是因为getSqlSelect
在该位置范围内没有变量。如果 select
被称为obj.select(...)
地方obj
是回调到工厂返回的对象,那么在它可以使用this.getSqlSelect(...)
来引用它。例如
var sql = this.getSqlSelect(table, filterAttributesArr);
// ^^^^^
如果select
没有正确调用this
,那将无法正常工作。如果您不需要公开它,只需在您的回调中定义它:
.factory('LocalDatabase', function () {
var arrResult = "";
function getSqlSelect(tablename, filterAttributesArr) {
return "";
}
return {
select: function (table, filterAttributesArr, success) {
var sql = getSqlSelect(table, filterAttributesArr);
var db = window.sqlitePlugin.openDatabase({ name: 'p16.sqlite', location: 0 });
}
};
})
如果select
未正确调用,this
而您确实需要暴露getSqlSelect
,则也可以这样做:
.factory('LocalDatabase', function () {
var arrResult = "";
function getSqlSelect(tablename, filterAttributesArr) {
return "";
}
return {
select: function (table, filterAttributesArr, success) {
var sql = getSqlSelect(table, filterAttributesArr);
var db = window.sqlitePlugin.openDatabase({ name: 'p16.sqlite', location: 0 });
},
getSqlSelect: getSqlSelect
};
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句